home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 095 / 151b_src.arc / CONFIG.BAS < prev    next >
BASIC Source File  |  1987-06-07  |  186KB  |  4,576 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG V3.02, Copyright 1983-87 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC ver. CPC15.1B)
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   10210 Oxfordshire Road
  8.       '   Great Falls, Virginia 22066
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. CPC15.1), to make copies of this  *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring, 10210*
  22.       ' *        Oxfordshire Road, Great falls, Virginia 22006                *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1987 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' *****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE                                            *
  31. ' *****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NUM.FILES = 7
  37.       NUM.GLOBAL = 4
  38.       NUM.MAIN = 17
  39.       NUM.SYSOP = 7
  40.       NUM.UTILITY = 11
  41.       I! = FRE(C$)
  42.       KEY OFF
  43.       PRINT TAB(60)"tm"
  44.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  45.       PRINT
  46.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  47.       PRINT
  48.       PRINT TAB(5) CHR$(214)STRING$(67,196)CHR$(183)
  49.       FOR I = 1 TO 12
  50.         READ A$
  51.         PRINT TAB(5) CHR$(186);A$;SPACE$(67-LEN(A$));CHR$(186)
  52.       NEXT
  53.       PRINT TAB(5) CHR$(211)STRING$(67,196)CHR$(189)
  54.       PRINT "  Copyright (c) 1983-1987 Tom Mack, 10210 Oxfordshire Rd, Great Falls, VA"
  55.       DATA "    If you are using RBBS-PC CPC15.1 and find it valuable, I
  56.       DATA "    suggest you consider a contribution to
  57.       DATA "
  58.       DATA "                 Capital PC Software Exchange
  59.       DATA "                     Post Office Box 6128
  60.       DATA "                Silver Spring, Maryland  20906
  61.       DATA ""
  62.       DATA "    You are free to copy and share RBBS-PC CPC15.1 with
  63.       DATA "    others on these three conditions:
  64.       DATA "      1.  This program is not distributed in modified form.
  65.       DATA "      2.  No fee or consideration is charged.
  66. 10230 DATA "      3.  This notice is not bypassed or removed.
  67. '
  68. ' *****************************************************************************
  69. ' *  DEFINE THE FUNCTIONS USED BY CONFIG                                      *
  70. ' *****************************************************************************
  71. '
  72.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60) _
  73.                          + (VAL(MID$(TIME$,4,2))*60) _
  74.                          + (VAL(MID$(TIME$,7,2))*1)))
  75.       DEF FNHSH(X$) = ((ASC(X$)*100  _
  76.                          +  ASC(MID$(X$,LEN(X$)/2,1))*10  _
  77.                          +  ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF)  +  1
  78.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1))*10  +  7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  79.       DELAY!    = FNTI! + 5
  80. 10480 IF FNTI! < DELAY! THEN _
  81.          GOTO 10480
  82. 10490 LOCATE 22,15
  83.       PRINT SPC(64)
  84.       IF COMMAND$ <> "" THEN _
  85.         CONFIG.FILENAME$ = COMMAND$: _
  86.         GOTO 10530
  87.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  88.       LOCATE 22,10
  89.       PRINT "Will you be running multiple copies of RBBS-PC (YES or NO)?";
  90.       GOSUB 22380
  91.       ON AB GOTO 10530,10510,10490,10490
  92. 10510 GOSUB 22480
  93.       '
  94. '
  95. ' *****************************************************************************
  96. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS                     *
  97. ' *****************************************************************************
  98. '
  99. 10530 ON ERROR GOTO 60010
  100.       FILE$ = CONFIG.FILENAME$
  101.       GOSUB 30000
  102.       M$ = "Z"
  103.       IF OKAY THEN _
  104.          CALL CNFGINIT : _
  105.          GOSUB 15790 : _
  106.          GOTO 10536
  107.       GOSUB 31060
  108.       PRINT CONFIG.FILENAME$ + " file not found.  A new one will be created.";
  109.       DELAY! = FNTI! + 5
  110.       GOSUB 60440
  111. 10532 GOSUB 31060
  112.       PRINT "Default drive on which RBBS is to reside (A-" + M$ + "): ";
  113.       LINE INPUT;HJ$
  114.       GOSUB 50654
  115.       IF LEN(HJ$)<>1 OR HJ$<"A" OR HJ$>M$ THEN _
  116.          GOTO 10532
  117.       DD$ = HJ$
  118.       CALL CNFGINIT
  119.       GOSUB 15790
  120.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.MENU$
  121.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.PREFIX$
  122.       GOTO 11710
  123. 10536 OPEN "I",#1,CONFIG.FILENAME$
  124. '
  125. ' *****************************************************************************
  126. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE                *
  127. ' *****************************************************************************
  128. '
  129. 11600 INPUT #1,DOWNLOAD.DRIVES$, _                        ' FD$
  130.                SYSOP.PASSWORD.1$, _                       ' PA$
  131.                SYSOP.PASSWORD.2$, _                       ' PB$
  132.                SYSOP.FIRST.NAME$, _                       ' NB$
  133.                SYSOP.LAST.NAME$, _                        ' NC$
  134.                REQUIRED.RINGS, _                          ' CE
  135.                START.OFFICE.HOURS, _                      ' AC
  136.                END.OFFICE.HOURS, _                        ' AD
  137.                MINUTES.PER.SESSION!, _                    ' TC!
  138.                MAX.ALLOWED.MSGS.FRM.DEF, _                ' MP      (DF)
  139.                ACT.MNTHS.B4.DELETING, _                   ' LA      (DF)
  140.                UPLOAD.DIRECTORY$, _                       ' UF$
  141.                EXPERT.USER, _                             ' XPR
  142.                ACTIVE.BULLETINS, _                        ' BG
  143.                PROMPT.BELL, _                             ' BE
  144.                PCJR, _                                    ' PCJR    (DF)
  145.                CODE.TYPE, _                               ' CL      (DF)
  146.                MENU$(1), _                                ' MG$
  147.                MENU$(2), _                                ' MH$
  148.                MENU$(3), _                                ' MI$
  149.                MENU$(4), _                                ' MJ$
  150.                MENU$(5), _                                ' MK$
  151.                CONFERENCE.MENU$, _                        ' CD$
  152.                CONFERENCE.VIEWER.SEC.LVL, _               ' VA      (DF)
  153.                WELCOME.INTERRUPTABLE, _                   ' OA
  154.                REMIND.FILE.TRANSFERS, _                   ' UD
  155.                PAGE.LENGTH, _                             ' PL
  156.                MAX.MESSAGE.LINES, _                       ' LW
  157.                DOORS.AVAILABLE, _                         ' WB
  158.                MO$                                        ' MO$     (DF)
  159.       GOSUB 22340
  160. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _                      ' ME$
  161.                MAIN.MESSAGE.BACKUP$, _                    ' MF$
  162.                CALLERS.FILE$, _                           ' CB$
  163.                COMMENTS.FILE$, _                          ' CC$
  164.                MAIN.USER.FILE$, _                         ' UC$
  165.                WELCOME.FILE$, _                           ' WA$
  166.                NEWUSER.FILE$, _                           ' NA$
  167.                DIRECTORY.EXTENTION$, _                    ' DIR$
  168.                COM.PORT$, _                               ' M13$
  169.                BULLETINS.OPTIONAL, _                      ' OD
  170.                USER.INIT.COMMAND$, _
  171.                RTS$, _                                               ' CPC15-1B
  172.                DOS.VERSION, _                             ' DA
  173.                FG, _                                      ' FGR
  174.                BG, _                                      ' BGR
  175.                BORDER, _                                  ' BDR
  176.                RBBS.BAT$, _                               ' RB$
  177.                RCTTY.BAT$                                 ' CI$
  178.       GOSUB 22340
  179. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _                    ' OB$
  180.                DUMMY$, _                                  ' OC$
  181.                HELP$(3), _
  182.                HELP$(4), _
  183.                HELP$(7), _
  184.                HELP$(9), _                                ' HA$(9)
  185.                BULLETIN.MENU$, _                          ' BA$
  186.                BULLETIN.PREFIX$, _                        ' BB$
  187.                DRIVE.FOR.BULLETINS$, _                    ' BD$     (DF)
  188.                MESSAGE.REMINDER, _                        ' RC
  189.                REQUIRE.NON.ASCII, _                       ' BF
  190.                DOORS.SECURITY.LEVEL, _                    ' SD
  191.                MAXIMUM.NUMBER.OF.NODES, _                 ' MC
  192.                NETWORK.TYPE, _                            ' SE
  193.                RECYCLE.TO.DOS, _                          ' CF
  194.                MAX.USR.FILE.SIZE.FRM.DEF, _               ' UB      (DF)
  195.                MAX.MSG.FILE.SIZE.FRM.DEF!, _              ' MQ!     (DF)
  196.                TRASHCAN.FILE$                             ' BC$
  197.       DONT.ASK = TRUE
  198.       GOSUB 21895
  199.       DONT.ASK = FALSE
  200.       GOSUB 22340
  201. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _                  ' ML
  202.                DEFAULT.SECURITY.LEVEL, _                  ' DB
  203.                SYSOP.SECURITY.LEVEL, _                    ' SB
  204.                FILESEC.FILE$, _                           ' FB$
  205.                SYSOP.MENU.SECURITY.LEVEL, _               ' SC
  206.                LOCAL.PASSWORD$, _                         ' KA$
  207.                MAXIMUM.VIOLATIONS, _                      ' ND
  208.                SYSOP.FUNCTION(1), _                       ' SA(1)
  209.                SYSOP.FUNCTION(2), _
  210.                SYSOP.FUNCTION(3), _
  211.                SYSOP.FUNCTION(4), _
  212.                SYSOP.FUNCTION(5), _
  213.                SYSOP.FUNCTION(6), _
  214.                SYSOP.FUNCTION(7), _                       ' SA(7)
  215.                PASSWORD.FILE$, _                          ' PD$
  216.                MAXIMUM.PASSWORD.CHANGES, _                ' CG
  217.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _      ' CH
  218.                OVERWRITE.SECURITY.LEVEL, _                ' WC
  219.                DOORS.TERMINAL.TYPE, _                     ' MN
  220.                LIMIT.DAILY.TIME                           ' M26
  221.       GOSUB 22340
  222. 11680 INPUT #1,MAIN.FUNCTION(1), _                        ' MD(1)
  223.                MAIN.FUNCTION(2), _
  224.                MAIN.FUNCTION(3), _
  225.                MAIN.FUNCTION(4), _
  226.                MAIN.FUNCTION(5), _
  227.                MAIN.FUNCTION(6), _
  228.                MAIN.FUNCTION(7), _
  229.                MAIN.FUNCTION(8), _
  230.                MAIN.FUNCTION(9), _
  231.                MAIN.FUNCTION(10), _
  232.                MAIN.FUNCTION(11), _
  233.                MAIN.FUNCTION(12), _
  234.                MAIN.FUNCTION(13), _
  235.                MAIN.FUNCTION(14), _
  236.                MAIN.FUNCTION(15), _
  237.                MAIN.FUNCTION(16), _
  238.                MAIN.FUNCTION(17), _
  239.                DUMMY$, _
  240.                WAIT.BEFORE.DISCONNECT                     ' TY
  241.       GOSUB 22340
  242. 11700 INPUT #1,FILES.FUNCTION(1), _                       ' FS(1)
  243.                FILES.FUNCTION(2), _
  244.                FILES.FUNCTION(3), _
  245.                FILES.FUNCTION(4), _
  246.                FILES.FUNCTION(5), _
  247.                FILES.FUNCTION(6), _
  248.                FILES.FUNCTION(7), _
  249.                UTILITY.FUNCTION(1), _                     ' UA(1)
  250.                UTILITY.FUNCTION(2), _
  251.                UTILITY.FUNCTION(3), _
  252.                UTILITY.FUNCTION(4), _
  253.                UTILITY.FUNCTION(5), _
  254.                UTILITY.FUNCTION(6), _
  255.                UTILITY.FUNCTION(7), _
  256.                UTILITY.FUNCTION(8), _
  257.                UTILITY.FUNCTION(9), _
  258.                UTILITY.FUNCTION(10), _
  259.                UTILITY.FUNCTION(11), _
  260.                GLOBAL.FUNCTION(1), _
  261.                GLOBAL.FUNCTION(2), _
  262.                GLOBAL.FUNCTION(3), _
  263.                GLOBAL.FUNCTION(4), _
  264.                UPLOAD.TIME.FACTOR!, _                     ' UPX!
  265.                COMPUTER.TYPE, _                           ' CM
  266.                REMIND.PROFILE, _                          ' CK
  267.                RBBS.NAME$, _                              ' FF$
  268.                COMMANDS.BETWEEN.RINGS, _                  ' M28
  269.                MNP.SUPPORT, _                             ' M29
  270.                PAGING.PRINTER.SUPPORT$, _                 ' MW$
  271.                MODEM.INIT.BAUD$                           ' B$
  272. 11705 INPUT #1,TURN.PRINTER.OFF, _
  273.                DIRECTORY.PATH$, _
  274.                MIN.SEC.TO.VIEW, _
  275.                LIMIT.SEARCH.TO.FMS, _
  276.                DEFAULT.CATEGORY.CODE$, _
  277.                DIR.CATEGORY.FILE$, _
  278.                NEW.FILES.CHECK, _
  279.                MAX.DESC.LEN, _
  280.                SHOW.SECTION, _
  281.                COMMANDS.IN.PROMPT, _
  282.                NEWUSER.SETS.DEFAULTS, _
  283.                HELP.PATH$, _
  284.                HELP.EXTENSION$, _
  285.                MAIN.COMMANDS$, _
  286.                FILE.COMMANDS$, _
  287.                UTIL.COMMANDS$, _
  288.                GLOBAL.COMMANDS$, _
  289.                SYSOP.COMMANDS$
  290.       INPUT #1,UPLOAD.PATH$, _
  291.                FMS.DIRECTORY$, _
  292.                ANS.MENU$,_
  293.                REQUIRED.QUESTIONNAIRE$,_
  294.                REMEMBER.NEW.USERS, _
  295.                SURVIVE.NOUSER.ROOM, _
  296.                PROMPT.HASH$, _
  297.                START.HASH, _
  298.                LEN.HASH, _
  299.                PROMPT.INDIV$, _
  300.                START.INDIV, _
  301.                LEN.INDIV
  302.       INPUT #1,BYPASS.MSGS, _
  303.                MUSIC, _
  304.                RESTRICT.BY.DATE, _
  305.                DAYS.TO.WARN, _
  306.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  307.                CALLBACK.VERIFICATION, _
  308.                RESTRICT.VALID.CMDS, _
  309.                NEW.USER.DEFAULT.MODE, _
  310.                NEW.USER.LINE.FEEDS, _
  311.                NEW.USER.NULLS, _
  312.                NEW.USER.BELL, _
  313.                NEW.USER.CASE, _
  314.                NEW.USER.MARGINS, _
  315.                WRAP.CALLERS.FILE$, _
  316.                REDIRECT.IO.METHOD, _
  317.                GO.TO.SHELL, _
  318.                HALT.ON.ERROR, _
  319.                NEW.PUBLIC.MSGS.SECURITY, _
  320.                NEW.PRIVATE.MSGS.SECURITY, _
  321.                SECURITY.NEEEDED.TO.CHANGE.MSGS, _
  322.                SL.CATEGORIZE.UPLOADS, _
  323.                BAUDOT, _
  324.                TIME.TO.DROP.TO.DOS, _
  325.                EXPIRED.SECURITY, _
  326.                DTR.DROP.DELAY, _
  327.                ASK.IDENTITY, _
  328.                USE.EXTERNAL.XMODEM, _
  329.                BUFFER.SIZE, _
  330.                MLCOM, _
  331.                SHOOT.YOURSELF, _
  332.                F7.MESSAGE$, _
  333.                NEW.USER.DEFAULT.PROTOCOL$, _
  334.                NEW.USER.GRAPHICS$, _
  335.                NET.MAIL$, _
  336.                MASTER.DIRECTORY.NAME$, _
  337.                PROTOCOL.PATH$, _
  338.                UPCAT.HELP$, _
  339.                ALWAYS.STREW.TO$, _
  340.                DUMMY$
  341.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _              ' PC
  342.                MODEM.INIT.WAIT.TIME, _
  343.                MODEM.COMMAND.DELAY.TIME, _
  344.                TURBO.RBBS
  345. 11706 INPUT #1,DNLD.SUB, _                                ' DNLD.SUB
  346.                WILL.SUBDIRS.B.USED, _                     ' M30      (DF)
  347.                UPLOAD.TO.SUBDIR, _                        ' M31
  348.                DOWNLOAD.TO.SUBDIR, _                      ' M32      (DF)
  349.                UPLOAD.SUBDIR$, _                          ' M33$
  350.                RESTRICT.BAUD, _                           ' M34
  351.                USE.COLOR, _                               ' M35
  352.                DISKFULL.GO.OFFLINE, _                     ' M36
  353.                EXTENDED.LOGGING, _                        ' M37
  354.                USER.RESET.COMMAND$, _
  355.                USER.COUNT.RINGS.COMMAND$, _
  356.                USER.ANSWER.COMMAND$, _
  357.                USER.GO.OFFHOOK.COMMAND$, _
  358.                DISK.FOR.DOS$, _                           ' M38$
  359.                DUMB.MODEM, _                              ' M39
  360.                COMMENTS.AS.MESSAGES, _                    ' M40
  361.                LSB, _                                     ' LSB
  362.                MSB, _                                     ' MSB
  363.                LINE.CONTROL.REGISTER, _                   ' LCR
  364.                MODEM.CONTROL.REGISTER, _                  ' MCR
  365.                LINE.STATUS.REGISTER, _                    ' LSR
  366.                MODEM.STATUS.REGISTER                      ' MSR
  367.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  368.          GOTO 11710
  369.       FOR I = 1 TO DNLD.SUB
  370.           INPUT #1,DNLD$(I)
  371.       NEXT
  372. 11710 GOSUB 22340
  373. '
  374. ' *****************************************************************************
  375. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED       *
  376. ' *****************************************************************************
  377. '
  378.       BULLETIN.MENU$ = RIGHT$(BULLETIN.MENU$,(LEN(BULLETIN.MENU$)-2))
  379.       BULLETIN.PREFIX$ = RIGHT$(BULLETIN.PREFIX$,(LEN(BULLETIN.PREFIX$)-2))
  380.       IF RECYCLE.TO.DOS = 0 THEN _
  381.          RECYCLE.TO.DOS$ = "INTERNAL" ELSE _
  382.          RECYCLE.TO.DOS$ = "SYSTEM
  383.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3))-1)
  384.       SF = SYSOP.FUNCTION(1)
  385.       GOSUB 16062
  386.       FOR I = 2 TO NUM.SYSOP
  387.         IF SYSOP.FUNCTION(I)   > SF THEN _
  388.            GOTO 11790
  389.       SF = SYSOP.FUNCTION(I)
  390. 11790 NEXT
  391.       MM = MAIN.FUNCTION(1)
  392.       FOR I = 1 TO NUM.MAIN
  393.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  394.         IF MAIN.FUNCTION(I)    > MM THEN _
  395.            GOTO 11810
  396.       MM = MAIN.FUNCTION(I)
  397. 11810 NEXT
  398.       FC = FILES.FUNCTION(1)
  399.       FOR I = 1 TO NUM.FILES
  400.         FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  401.         IF FILES.FUNCTION(I)   > FC THEN _
  402.            GOTO 11830
  403.       FC = FILES.FUNCTION(I)
  404. 11830 NEXT
  405.       UE = UTILITY.FUNCTION(1)
  406.       FOR I = 1 TO NUM.UTILITY
  407.         UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  408.         IF UTILITY.FUNCTION(I) > UE THEN _
  409.            GOTO 11850
  410.       UE = UTILITY.FUNCTION(I)
  411. 11850 NEXT
  412.       FOR I = 1 TO NUM.GLOBAL
  413.         GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  414.       NEXT
  415.       CLOSE #1
  416.       GOSUB 22340
  417.       GOSUB 50480
  418.       GOSUB 22340
  419.       GOSUB 50530
  420.       GOSUB 22340
  421. 11870 IF EXPERT.USER = 0 THEN _
  422.          EXPERT.USER$ = "NOVICE
  423.       IF EXPERT.USER = -1 THEN _
  424.          EXPERT.USER$ = "EXPERT
  425.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  426.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$)-1))
  427.       PROMPT.BELL$ = "ON"
  428.       IF PROMPT.BELL = 0 THEN _
  429.          PROMPT.BELL$ = "OFF
  430.       CODE.TYPE$ = "BASICA"
  431.       IF CODE.TYPE = TRUE THEN _
  432.          CODE.TYPE$ = "COMPILED
  433.       BULLETINS.OPTIONAL$ = FNYESNO$(BULLETINS.OPTIONAL)
  434.       GOSUB 15780
  435.       MESSAGE.REMINDER$ = FNYESNO$(MESSAGE.REMINDER)
  436.       REQUIRE.NON.ASCII$ = FNYESNO$(REQUIRE.NON.ASCII)
  437.       WELCOME.INTERRUPTABLE$ = FNYESNO$(WELCOME.INTERRUPTABLE)
  438.       REMIND.FILE.TRANSFERS$ = FNYESNO$(REMIND.FILE.TRANSFERS)
  439.       REMIND.PROFILE$ = FNYESNO$(REMIND.PROFILE)
  440.       DOORS.AVAILABLE$ = FNYESNO$(DOORS.AVAILABLE)
  441.       IF SYSOP.PASSWORD.1$ = "" THEN _
  442.          MN1$ = "(Disabled)" ELSE _
  443.          MN1$ = SYSOP.PASSWORD.1$
  444.       IF SYSOP.PASSWORD.2$ = "" THEN _
  445.          MN2$ = "(Disabled)" ELSE _
  446.          MN2$ = SYSOP.PASSWORD.2$
  447.       M11$ = "NO"
  448.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  449.          M11$ = "YES
  450.       LIMIT.DAILY.TIME$ = FNYESNO$(LIMIT.DAILY.TIME)
  451.       COMMANDS.BETWEEN.RINGS$ = FNYESNO$(COMMANDS.BETWEEN.RINGS)
  452.       MNP.SUPPORT$ = FNYESNO$(MNP.SUPPORT)
  453.       WILL.SUBDIRS.B.USED$ = FNYESNO$(WILL.SUBDIRS.B.USED)
  454.       UPLOAD.TO.SUBDIR$ = FNYESNO$(UPLOAD.TO.SUBDIR)
  455.       DOWNLOAD.TO.SUBDIR$ = FNYESNO$(DOWNLOAD.TO.SUBDIR)
  456.       RESTRICT.BAUD$ = FNYESNO$(RESTRICT.BAUD)
  457.       IF RESTRICT.BAUD=-2 THEN _
  458.          RESTRICT.BAUD$="YES=Registered users"
  459.       USE.COLOR$ = FNYESNO$(USE.COLOR)
  460.       DISKFULL.GO.OFFLINE$ = FNYESNO$(DISKFULL.GO.OFFLINE)
  461.       EXTENDED.LOGGING$ = FNYESNO$(EXTENDED.LOGGING)
  462.       DUMB.MODEM$ = FNYESNO$(DUMB.MODEM)
  463.       COMMENTS.AS.MESSAGES$ = FNYESNO$(COMMENTS.AS.MESSAGES)
  464.       TURBO.RBBS$ = FNYESNO$(TURBO.RBBS)
  465.       LIMIT.SEARCH.TO.FMS$ = FNYESNO$(LIMIT.SEARCH.TO.FMS)
  466.       NEW.FILES.CHECK$ = FNYESNO$(NEW.FILES.CHECK)
  467.       SHOW.SECTION$ = FNYESNO$(SHOW.SECTION)
  468.       COMMANDS.IN.PROMPT$ = FNYESNO$(COMMANDS.IN.PROMPT)
  469.       NEWUSER.SETS.DEFAULTS$ = FNYESNO$(NEWUSER.SETS.DEFAULTS)
  470.       REMEMBER.NEW.USERS$ = FNYESNO$(REMEMBER.NEW.USERS)
  471.       SURVIVE.NOUSER.ROOM$ = FNYESNO$(SURVIVE.NOUSER.ROOM)
  472.       TURN.PRINTER.OFF$ = FNYESNO$(TURN.PRINTER.OFF)
  473.       MUSIC$ = FNYESNO$(MUSIC)
  474.       RESTRICT.BY.DATE$ = FNYESNO$(RESTRICT.BY.DATE)
  475.       IF START.HASH < 1 THEN START.HASH = 1
  476.       IF LEN.HASH < 2 THEN LEN.HASH = 31
  477.       REDIRECT.IO.METHOD$ = FNYESNO$(REDIRECT.IO.METHOD)
  478.       GO.TO.SHELL$ = "SHELL"
  479.       IF NOT GO.TO.SHELL THEN _
  480.          GO.TO.SHELL$ = "EXIT RBBS-PC"
  481.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  482.          REQUIRED.QUESTIONNAIRE$ = "NONE"
  483.       MLCOM$ = FNYESNO$(MLCOM)
  484.       SHOOT.YOURSELF$ = FNYESNO$(SHOOT.YOURSELF)
  485.       GOSUB 18002
  486.       GOSUB 18102
  487.       I = 1
  488.       GOSUB 13030
  489. '
  490. ' *****************************************************************************
  491. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.                   *
  492. ' *****************************************************************************
  493. '
  494.       Y$ = "
  495. 12151 F = 0
  496.       MAINMSG$ = MAIN.MESSAGE.FILE$
  497.       MAINUSR$ = MAIN.USER.FILE$
  498. 12160 KEY OFF
  499.       GOSUB 22340
  500.       CALLS.TODATE! = 0                                 ' set initial message number to 0
  501.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  502.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  503.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  504.       FIRST.MESSAGE.RECORD = 2+ MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  505.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  506.       HIGHEST.MESSAGE.RECORD = 5*MAX.ALLOWED.MSGS.FRM.DEF _
  507.                                + 1 + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  508.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF ' MESSAGES file -- maximum number of messages
  509.       FILE$ = MAIN.MESSAGE.FILE$
  510.       MESSAGE.FILE.FOUND = 0
  511.       USER.FILE.FOUND = 0
  512.       GOSUB 30000
  513. '
  514. ' If MESSAGES exist, get checkpoint record
  515. '
  516.       IF OKAY THEN _
  517.          MESSAGE.FILE.FOUND = OKAY : _
  518.          GOSUB 30040 : _
  519.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  520.          MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD : _
  521.          MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD-FIRST.MESSAGE.RECORD)/5) + 1
  522.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  523.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  524.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  525.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  526.          GOSUB 30450                  ' Assure number of msgs.>0
  527.       FILE$ = MAIN.USER.FILE$         ' Check for USERS file
  528.       GOSUB 30000
  529. '
  530. ' If USERS file exist, set values
  531. '
  532.       IF OKAY THEN _
  533.          USER.FILE.FOUND = OKAY : _
  534.          FILE$ = MAIN.USER.FILE$ : _
  535.          GOSUB 30180 : _
  536.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  537.       IF MESSAGE.FILE.FOUND <> -1 AND F <> 2 THEN _
  538.          CURRENT.USER.COUNT = UG + 1   ' if no MESSAGES file, assume USERS full
  539.       IF MESSAGE.FILE.FOUND = -1 THEN _
  540.          GOSUB 30450                   ' if MESSAGES file, re-write checkpoint
  541.       IF MESSAGE.FILE.FOUND <> -1 THEN _
  542.          GOSUB 30230                   ' write new MESSAGES file if none
  543.       IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND = -1 THEN _
  544.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  545.          GOSUB 50000                   ' write new USERS file if none
  546.       IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND <> -1 THEN _
  547.          GOSUB 50000                   ' write new USERS file if none
  548.       FOR I = 1 TO 10
  549.         KEY I,""
  550.       NEXT
  551.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  552.       GOSUB 22140
  553. '
  554. ' *****************************************************************************
  555. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU                                   *
  556. ' *****************************************************************************
  557. '
  558. 12190 IX = 0
  559. 12320 CALL DISPLAY
  560.       IF IX = 21 THEN _
  561.          GOTO 22350
  562.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (Part 1)
  563.                     12624, _  ' 2        F2 - Global Parameters (Part 2)
  564.                     12626, _  ' 3        F3 - Global Parameters (Part 3)
  565.                     12628, _  ' 3        F4 - Static RBBS-PC Files
  566.                     12630, _  ' 4        F5 - Dynamic RBBS-PC Files
  567.                     12632, _  ' 5        F6 - RBBS-PC "doors"
  568.                     12634, _  ' 6        F7 - RBBS-PC security parameters
  569.                     12636, _  ' 7        F8 - Multiple RBBS-PC parameters
  570.                     12638, _  ' 8        F9 - RBBS-PC's utilities
  571.                     12640, _  ' 9       F10 - RBBS-PC File Manager
  572.                     12642, _  '10  Shift-F1 - RBBS-PC communications parameters
  573.                     12643, _  '11  Shift-F2 - RBBS-PC Net Mail
  574.                     12644     '12  Shift-F3 - New user's parameters
  575. '
  576. ' *****************************************************************************
  577. ' *  HANDLE UNSUPPORTED REQUEST                                               *
  578. ' *****************************************************************************
  579. '
  580. 12325 IX = IPAGE
  581.       GOTO 12320
  582. 12330 IX = -1
  583.       GOTO 12320
  584. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  585.                        12910, _  '   2 SYSOP's last name
  586.                        12980, _  '   3 SYSOP's remote pseudonym 1
  587.                        13060, _  '   4 SYSOP's remote pseudonym 2
  588.                        12670, _  '   5 SYSOP's password for local signon
  589.                        13140, _  '   6 SYSOP's default signon mode
  590.                        13210, _  '   7 SYSOP's office hours
  591.                        13224, _  '   8 Page SYSOP with printer's bell
  592.                        13238, _  '   9 300 BAUD callers (yes or no)
  593.                        13245, _  '  10 Using ANSI.SYS
  594.                        13249, _  '  11 Go off-line when disk is full
  595.                        13750, _  '  12 Prompt bell
  596.                        13840, _  '  13 Maximum time per session
  597.                        16650, _  '  14 Limit users to a max time per day
  598.                        13940, _  '  15 Months of inactivity before deleted
  599.                        13131, _  '  16 Name of this RBBS-PC
  600.                        15530, _  '  17 Foreground color
  601.                        15590, _  '  18 Background color
  602.                        15650, _  '  19 Border color
  603.                        13000     '  20 Who can bypass message subsystem
  604.       GOTO 12325
  605. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  606.                        16690, _  '  22 Remind users of uploads and downloads
  607.                        16722, _  '  23 Remind users of their profile
  608.                        16730, _  '  24 Specify default page length
  609.                        16790, _  '  25 Set maximum number of lines/message
  610.                        15880, _  '  26 Require non-ASCII protocol?
  611.                        15234, _  '  27 Factor to extend time for uploads
  612.                        17700, _  '  28 Required questionnaire name
  613.                        16000, _  '  29 Is system "welcome" interruptable?
  614.                        15840, _  '  30 Are the system bulletins optional?
  615.                        16040, _  '  31 Type of PC running RBBS-PC
  616.                        17230, _  '  32 Symbols for SYSOP's commands
  617.                        17240, _  '  33 Symbols for main menu's commands
  618.                        17250, _  '  34 Symbols for file menu's commands
  619.                        17260, _  '  35 Symbols for utilities menu's commands
  620.                        17264, _  '  36 Symbols for "global" commands
  621.                        17500, _  '  37 Show section at command prompt?
  622.                        17550, _  '  38 Show commands at command prompt?
  623.                        15820, _  '  39 Use machine language subroutines?
  624.                        15830     '  40 Restrict valid cmnds to current section
  625.       GOTO 12325
  626. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  627.                        18100, _  '  42 Field used distinguish users with same id
  628.                        17630, _  '  43 Restrict users by date
  629.                        18510, _  '  44 Days before expiration to warn
  630.                        18530, _  '  45 Security level when subscription expires
  631.                        18520, _  '  46 Days a newuser gets when registers
  632.                        17610, _  '  47 Turn printer off on recycle
  633.                        17620, _  '  48 Play music for RBBS themes?
  634.                        21760, _  '  49 Buffer size for text files
  635.                        22550, _  '  50 Notify users when SYSOP wants system?
  636.                        22550, _  '  51 Call back verification of all/new users
  637.                        12325, _  '  52
  638.                        12325, _  '  53
  639.                        12325, _  '  54
  640.                        12325, _  '  55
  641.                        12325, _  '  56
  642.                        12325, _  '  57
  643.                        12325, _  '  58
  644.                        12325, _  '  59
  645.                        12325     '  60
  646.       GOTO 12325
  647. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  648.                        15290, _  '  62 Number of active bulletins
  649.                        14800, _  '  63 Prefix used to name bulletin files
  650.                        14810, _  '  64 Drive and path for 'help' files
  651.                        14820, _  '  65 Prefix of nine major help files
  652.                        14825, _  '  66 Extension for individual help files
  653.                        14915, _  '  67 Help file for categorizing uploads
  654.                        14830, _  '  68 Name of 'newuser' file
  655.                        14840, _  '  69 Name of 'welcome" file
  656.                        14860, _  '  70 Name of SYSOP's commands menu
  657.                        14870, _  '  71 Name of main message command menu
  658.                        14880, _  '  72 Name of file subsystem command menu
  659.                        14890, _  '  73 Name of utilities command menu
  660.                        14900, _  '  74 Menu listing available conferences
  661.                        14905, _  '  75 Menu of questionnaires
  662.                        14910, _  '  76 File of unacceptable user names
  663.                        12325, _  '  77
  664.                        12325, _  '  78
  665.                        12325, _  '  79
  666.                        12325     '  80
  667.       GOTO 12325
  668. 12630 ON ILOOKUP GOSUB 15460, _  '  81 Name of 'message' file
  669.                        15500, _  '  82 Name of 'user' file
  670.                        15462, _  '  83 Name of 'comments' file
  671.                        15993, _  '  84 Record comments as private messages?
  672.                        15461, _  '  85 Name of 'callers' file
  673.                        15991, _  '  86 Extened logging to 'callers' file?
  674.                        22550, _  '  87 Wrap-around the 'callers' file?
  675.                        12325, _  '  88
  676.                        12325, _  '  89
  677.                        12325, _  '  90
  678.                        12325, _  '  91
  679.                        12325, _  '  92
  680.                        12325, _  '  93
  681.                        12325, _  '  94
  682.                        12325, _  '  95
  683.                        12325, _  '  96
  684.                        12325, _  '  97
  685.                        12325, _  '  98
  686.                        12325, _  '  99
  687.                        12325     ' 100
  688.       GOTO 12325
  689. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  690.                        16130, _  ' 102 Name of menu listing available doors
  691.                        16140, _  ' 103 Name of file built dynamical for doors
  692.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  693.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  694.                        16170, _  ' 106 Enable CTTY command for doors
  695.                        16180, _  ' 107 Invoke "drivers" via shell or DOS exit
  696.                        12325, _  ' 108
  697.                        12325, _  ' 109
  698.                        12325, _  ' 110
  699.                        12325, _  ' 111
  700.                        12325, _  ' 112
  701.                        12325, _  ' 113
  702.                        12325, _  ' 114
  703.                        12325, _  ' 115
  704.                        12325, _  ' 116
  705.                        12325, _  ' 117
  706.                        12325, _  ' 118
  707.                        12325, _  ' 119
  708.                        12325     ' 120
  709.       GOTO 12325
  710. 12634 ON ILOOKUP GOSUB 17160, _  ' 121 Minimum security level to logon
  711.                        17170, _  ' 122 Default security level for new users
  712.                        17180, _  ' 123 SYSOP's security level
  713.                        17190, _  ' 124 File listing download-secured files
  714.                        17200, _  ' 125 Minimum security to see SYSOP's menu
  715.                        17210, _  ' 126 Minimum security level to use 'doors'
  716.                        17220, _  ' 127 Max # security violations allowed
  717.                        17230, _  ' 128 Security levels for SYSOP commands
  718.                        17240, _  ' 129 Security levels for main commands
  719.                        17250, _  ' 130 Security levels for file commands
  720.                        17260, _  ' 131 Security levels for utilities commands
  721.                        17264, _  ' 132 Security level for 'global' commands'
  722.                        17270, _  ' 133 File name with privileged passwords
  723.                        17290, _  ' 134 Max # password changes allowed
  724.                        17300, _  ' 135 Min. security for temp. passwords
  725.                        17310, _  ' 136 Min. security to overwrite on uploads
  726.                        17316, _  ' 137 User's security exempted from packing
  727.                        22550, _  ' 138 Security assigned new public messages
  728.                        22550, _  ' 139 Security assigned new private messages
  729.                        22550     ' 140 Security to revise message's security
  730.       GOTO 12325
  731. 12636 ON ILOOKUP GOSUB 21750, _  ' 141 Maximum number of concurrent RBBS-PC's
  732.                        21810, _  ' 142 Environment running RBBS-PC
  733.                        21950, _  ' 143 Method that RBBS-PC re-cycles with
  734.                        21910, _  ' 144 Number of records in 'user' file
  735.                        22040, _  ' 145 Number of records in 'message' file
  736.                        13890, _  ' 146 Maximum number of messages allowed
  737.                        25040, _  ' 147 Conference file maintenance
  738.                        12325, _  ' 148
  739.                        12325, _  ' 149
  740.                        12325, _  ' 150
  741.                        12325, _  ' 151
  742.                        12325, _  ' 152
  743.                        12325, _  ' 153
  744.                        12325, _  ' 154
  745.                        12325, _  ' 155
  746.                        12325, _  ' 156
  747.                        12325, _  ' 157
  748.                        12325, _  ' 158
  749.                        12325, _  ' 159
  750.                        12325     ' 160
  751.       IF REFRESH = 1 THEN _
  752.          REFRESH = 0 : _
  753.          GOTO 12151
  754.       IF REFRESH = 2 THEN _
  755.          REFRESH = 0 : _
  756.          GOTO 12160
  757.       GOTO 12325
  758. 12638 ON ILOOKUP GOSUB 23160, _  ' 161 Pack the 'messages' file
  759.                        22570, _  ' 162 Rebuild the 'user' file
  760.                        23630, _  ' 163 Print the message headers
  761.                        23740, _  ' 164 Renumber messages
  762.                        23620, _  ' 165 Repair the 'message' file
  763.                        24050, _  ' 166 Require users to answer questionnaire
  764.                        24790, _  ' 167 Check FMS directory
  765.                        12325, _  ' 168
  766.                        12325, _  ' 169
  767.                        12325, _  ' 170
  768.                        12325, _  ' 171
  769.                        12325, _  ' 172
  770.                        12325, _  ' 173
  771.                        12325, _  ' 174
  772.                        12325, _  ' 175
  773.                        12325, _  ' 176
  774.                        12325, _  ' 177
  775.                        12325, _  ' 178
  776.                        12325, _  ' 179
  777.                        12325     ' 180
  778.       GOTO 12325
  779. 12640 ON ILOOKUP GOSUB 14920, _  ' 181 Drive available for uploading
  780.                        12730, _  ' 182 Name of directory for uploading
  781.                        18550, _  ' 183 Drive/path for upload dir
  782.                        13470, _  ' 184 Drive(s) available for downloading
  783.                        25380, _  ' 185 Are DOS subdirectories used?
  784.                        25420, _  ' 186 Upload to a DOS subdirectory?
  785.                        25460, _  ' 187 Are downloads from DOS subdirectories?
  786.                        25495, _  ' 188 List, change, add, delete subdir.?
  787.                        14850, _  ' 189 Upload directory's file name extension
  788.                        15920, _  ' 190 Omit directory list from N>ew command?
  789.                        18350, _  ' 191 CC all upload descriptions to
  790.                        12740, _  ' 192 FMS directory name
  791.                        18515, _  ' 193 Security level to categorize uploads
  792.                        17590, _  ' 194 Limit file searches to upload dir
  793.                        18200, _  ' 195 Default category codes for uploads
  794.                        18300, _  ' 196 File name with valid category codes
  795.                        17600, _  ' 197 Enable download of new files at logon
  796.                        18400, _  ' 198 Length of description of uploads
  797.                        18500, _  ' 199 Min security level to view new uploads
  798.                        18600     ' 200 Drive/path directory files
  799.       GOTO 12325
  800. 12642 ON ILOOKUP GOSUB 14120, _  ' 201 Communications Port being used
  801.                        15240, _  ' 202 Seconds for modem to initalize
  802.                        15250, _  ' 203 Seconds to wait before issuing cmds.
  803.                        13228, _  ' 204 Number of rings to answer on
  804.                        15710, _  ' 205 Use standard RBBS-PC modem commands
  805.                        15911, _  ' 206 Microcom's MNP available?
  806.                        16121, _  ' 207 Issue modem commands between rings?
  807.                        16124, _  ' 208 Baud rate to initially open modem at
  808.                        16031, _  ' 209 Seconds to wait before disconnecting
  809.                        16725, _  ' 210 Is a dumb modem being used?
  810.                        23731, _  ' 211 Initialize Hayes 2400 firmware
  811.                        18540, _  ' 212 DTR drop delay time
  812.                        18620, _  ' 213 Where external protocol pgms are
  813.                        17640, _  ' 214 Use xmodem in external protocol pgms
  814.                        17650, _  ' 215 Always check for autodownload support
  815.                        18360, _  ' 216 Restrict dir search for 'ALL' to
  816.                        12325, _  ' 217 Modem TDD for BAUDOT code?
  817.                        13260, _  ' 218 Use RTS for modem flow control? ' CPC15-1B
  818.                        12325, _  ' 219
  819.                        12325     ' 220
  820.       GOTO 12325
  821. 12643 ON ILOOKUP GOSUB 26040, _  ' 221 Time of day to drop to DOS
  822.                        26070, _  ' 222 NET-MAIL driver to invoke     ' CPC15-1B
  823.                        12325, _  ' 223
  824.                        12325, _  ' 224
  825.                        12325, _  ' 225
  826.                        12325, _  ' 226
  827.                        12325, _  ' 227
  828.                        12325, _  ' 228
  829.                        12325, _  ' 229
  830.                        12325, _  ' 230
  831.                        12325, _  ' 231
  832.                        12325, _  ' 232
  833.                        12325, _  ' 233
  834.                        12325, _  ' 234
  835.                        12325, _  ' 235
  836.                        12325, _  ' 236
  837.                        12325, _  ' 237
  838.                        12325, _  ' 238
  839.                        12325, _  ' 239
  840.                        12325     ' 240
  841.       GOTO 12325
  842. 12644 ON ILOOKUP GOSUB 17560, _  ' 241 Prompt new users for their preferences
  843.                        22550, _  ' 242 New users default sign-on mode
  844.                        22550, _  ' 243 New users default file-transfer mode
  845.                        22550, _  ' 244 Line feeds for new users default to
  846.                        22550, _  ' 245 Nulls for new users default to
  847.                        22550, _  ' 246 Prompt bell for new users defaults to
  848.                        22550, _  ' 247 New users 'graphics' ability is
  849.                        22550, _  ' 248 New users upper/lower case
  850.                        22550, _  ' 249 New users margins defaults are
  851.                        17570, _  ' 250 Remember new users
  852.                        17580, _  ' 251 Survive no user room
  853.                        12325, _  ' 252
  854.                        12325, _  ' 253
  855.                        12325, _  ' 254
  856.                        12325, _  ' 255
  857.                        12325, _  ' 256
  858.                        12325, _  ' 257
  859.                        12325, _  ' 258
  860.                        12325, _  ' 259
  861.                        12325     ' 260
  862.       GOTO 12325
  863. '
  864. ' *****************************************************************************
  865. ' * PROCESS THE PASSWORD SELECTED FOR THE LOCAL SYSOP TO TAKE OVER RBBS-PC    *
  866. ' *****************************************************************************
  867. '
  868. 12670 GOSUB 31060
  869.       XX$ = "Enter password (8 characters or less)"
  870.       GOSUB 50345
  871.       GOSUB 14990
  872.       IF LEN(HJ$)>8 OR INSTR(HJ$,"0!") THEN _
  873.          HJ$ = "5" : _
  874.          GOTO 12670
  875.       LOCAL.PASSWORD$ = HJ$
  876.       RETURN
  877. '
  878. ' *****************************************************************************
  879. ' * PROCESS NAME OF UPLOAD DIRECTORY                                          *
  880. ' *****************************************************************************
  881. '
  882. 12730 A$ = "upload"
  883.       GOSUB 13590
  884.       UPLOAD.DIRECTORY$ = HJ$
  885.       RETURN
  886. '
  887. ' *****************************************************************************
  888. ' * Get the File Management System Directory                                  *
  889. ' *****************************************************************************
  890. '
  891. 12740 A$ = "File Management System (or NONE)"
  892.       GOSUB 13590
  893.       FMS.DIRECTORY$ = HJ$
  894.       IF FMS.DIRECTORY$ = "NONE" THEN _
  895.          FMS.DIRECTORY$ = ""
  896.       RETURN
  897. '
  898. ' *****************************************************************************
  899. ' * GET THE SYSOP'S FIRST NAME                                                *
  900. ' *****************************************************************************
  901. '
  902. 12840 XX$ = "What is the SYSOP's FIRST name? "
  903.       GOSUB 50345
  904.       LINE INPUT;HJ$
  905.       IF HJ$ = "" THEN _
  906.          GOTO 12840
  907.       IF LEN(HJ$) < 3 THEN _
  908.          GOTO 12840
  909.       GOSUB 50654
  910.       SYSOP.FIRST.NAME$ = HJ$
  911.       RETURN
  912. '
  913. ' *****************************************************************************
  914. ' * PROCESS THE SYSOP'S LAST NAME                                             *
  915. ' *****************************************************************************
  916. '
  917. 12910 XX$ = "What is the SYSOP's LAST name? "
  918.       GOSUB 50345
  919.       LINE INPUT;HJ$
  920.       IF HJ$ = "" THEN _
  921.          GOTO 12910
  922.       IF LEN(HJ$) < 3 THEN _
  923.          GOTO 12910
  924.       GOSUB 50654
  925.       SYSOP.LAST.NAME$ = HJ$
  926.       RETURN
  927. '
  928. ' *****************************************************************************
  929. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY  *
  930. ' *****************************************************************************
  931. '
  932. 12980 XX$ = "What is the SYSOP's Password #1? "
  933.       GOSUB 50345
  934.       LINE INPUT;HJ$
  935.       GOSUB 50654
  936.       SYSOP.PASSWORD.1$ = HJ$
  937.       IF SYSOP.PASSWORD.1$ = "" THEN _
  938.          MN1$ = "(Disabled)" ELSE _
  939.          MN1$ = SYSOP.PASSWORD.1$
  940.       RETURN
  941. '
  942. ' *****************************************************************************
  943. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM          *
  944. ' *****************************************************************************
  945. '
  946. 13000 CLS
  947.       I = 0
  948.       LOCATE 5,5
  949.       PRINT "Please identify the type of user that can bypass the message subsystem:"
  950.       LOCATE 7,10
  951.       PRINT "0.   Any user"
  952.       LOCATE 9,10
  953.       PRINT "1.   Any user except new (or first-time) users"
  954.       LOCATE 11,10
  955.       PRINT "2.   Only EXPERT users"
  956.       LOCATE 13,10
  957.       PRINT "3.   Users with a specific security level."
  958. 13010 GOSUB 50340
  959.       XX$ = "Select environment (0 to 3, CR to end) "
  960.       GOSUB 50345
  961.       LINE INPUT;X$
  962.       IF X$ = "" THEN _
  963.          RETURN
  964.       BYPASS = VAL(X$)
  965. 13020 IF BYPASS < 0 OR BYPASS > 3 THEN _
  966.          GOTO 13010
  967.       BYPASS$ = NOT.YET.IN$
  968.       RETURN
  969. 13030 IF BYPASS = 0 THEN _
  970.          BYPASS$ = "Any user" : _
  971.          RETURN
  972.       IF BYPASS = 1 THEN _
  973.          BYPASS$ = "All but new users" : _
  974.          RETURN
  975.       IF BYPASS = 2 THEN _
  976.          BYPASS$ = "Only EXPERT users" : _
  977.          RETURN
  978.       IF I = 0 THEN _
  979.          XX$ = "Specify the security level required to bypass messages. " : _
  980.          GOSUB 50345 : _
  981.          LINE INPUT;X$
  982.       BYPASS$ = "Security >"+STR$(VAL(X$))+" users"
  983.       RETURN
  984. '
  985. ' *****************************************************************************
  986. ' * PROCESS THE "PSEUDONYM" (LAST NAME) USED BY THE SYSOP TO LOGON REMOTELY   *
  987. ' *****************************************************************************
  988. '
  989. 13060 XX$ = "What is the SYSOP's Password #2? "
  990.       GOSUB 50345
  991.       LINE INPUT;HJ$
  992.       GOSUB 50654
  993.       SYSOP.PASSWORD.2$ = HJ$
  994.       IF SYSOP.PASSWORD.2$ = "" THEN _
  995.          MN2$ = "(Disabled)" ELSE _
  996.          MN2$ = SYSOP.PASSWORD.2$
  997.       RETURN
  998. '
  999. ' *****************************************************************************
  1000. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME                      *
  1001. ' *****************************************************************************
  1002. '
  1003. 13131 XX$ = "Enter name for this RBBS-PC (19 characters or less) "
  1004.       GOSUB 50345
  1005.       LINE INPUT;HJ$
  1006.       IF LEN(HJ$) > 19 THEN _
  1007.          GOTO 13131
  1008.       GOSUB 50654
  1009.       RBBS.NAME$ = HJ$
  1010.       RETURN
  1011. '
  1012. ' *****************************************************************************
  1013. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE        *
  1014. ' *****************************************************************************
  1015. '
  1016. 13140 XX$ = "SYSOP's default sign-on mode (EXPERT/NOVICE)? "
  1017.       GOSUB 50345
  1018.       LINE INPUT;HJ$
  1019.       IF LEN(HJ$) = 6 OR LEN(HJ$) = 1 THEN _
  1020.          GOTO 13170
  1021.       GOTO 13140
  1022. 13170 GOSUB 50654
  1023.       IF HJ$ = "E" OR HJ$ = "EXPERT" THEN _
  1024.          EXPERT.USER$ = "EXPERT" : _
  1025.          RETURN
  1026.       IF HJ$ = "N" OR HJ$ = "NOVICE" THEN _
  1027.          EXPERT.USER$ = "NOVICE" : _
  1028.          RETURN
  1029.       GOTO 13140
  1030. '
  1031. ' *****************************************************************************
  1032. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"                              *
  1033. ' *****************************************************************************
  1034. '
  1035. 13210 XX$ = "What is the earliest SYSOP wants to be paged? -- HHMM "
  1036.       GOSUB 50345
  1037.       LINE INPUT;HJ$
  1038.       IF LEN(HJ$) <> 4 THEN _
  1039.          GOTO 13210
  1040.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  1041.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  1042.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  1043.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  1044.          GOTO 13210
  1045.       START.OFFICE.HOURS = VAL(HJ$)
  1046.       IF START.OFFICE.HOURS < 0 OR START.OFFICE.HOURS > 2400 THEN _
  1047.          GOTO 13210
  1048. 13216 XX$ = "What is the latest SYSOP wants to be paged? ---- HHMM "
  1049.       GOSUB 50345
  1050.       LINE INPUT;HJ$
  1051.       IF LEN(HJ$) <> 4 THEN _
  1052.          GOTO 13216
  1053.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  1054.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  1055.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  1056.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  1057.          GOTO 13216
  1058.       END.OFFICE.HOURS = VAL(HJ$)
  1059.       IF END.OFFICE.HOURS < 0 OR END.OFFICE.HOURS > 2400 THEN _
  1060.          GOTO 13216
  1061.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1062.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1063.       RETURN
  1064. '
  1065. ' *****************************************************************************
  1066. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING               *
  1067. ' *****************************************************************************
  1068. '
  1069. 13224 XX$ = "Use on-line printer's bell to the page SYSOP? (YES or NO) "
  1070.       GOSUB 50345
  1071.       GOSUB 22380
  1072.       ON AB GOTO 13226,13226,13224,13224
  1073. 13226 M11$ = HJ$
  1074.       RETURN
  1075. '
  1076. ' *****************************************************************************
  1077. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING         *
  1078. ' *****************************************************************************
  1079. '
  1080. 13228 A$ = ""
  1081.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1"
  1082. 13229 XX$ = "How many rings should RBBS-PC wait before answering? " + A$
  1083.       GOSUB 50345
  1084.       LINE INPUT;HJ$
  1085.       REQUIRED.RINGS = FIX(VAL(HJ$))
  1086.       IF REQUIRED.RINGS < 0 OR REQUIRED.RINGS > 255 THEN _
  1087.          GOTO 13228
  1088.       IF REQUIRED.RINGS = 0 THEN _
  1089.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1" : _
  1090.          RETURN
  1091. 13233 XX$ = "Next call answered after" + STR$(REQUIRED.RINGS) + " rings. Do you want ringback? (YES/NO)"
  1092.       GOSUB 50345
  1093.       GOSUB 22380
  1094.       ON AB GOTO 13237,13235,13233,13233
  1095. 13235 IF REQUIRED.RINGS > 5 THEN _
  1096.          A$ = "(<6 for ringback)" : _
  1097.          GOTO 13229
  1098.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "255  "
  1099.       RETURN
  1100. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "254  "
  1101.       RETURN
  1102. '
  1103. ' *****************************************************************************
  1104. ' * ALLOW THE SYSOP TO ELECT TO HANDLE CALLS FROM 300 BAUD USERS              *
  1105. ' *****************************************************************************
  1106. '
  1107. 13238 XX$ = "Decline calls from users at 300 BAUD (YES OR NO) "
  1108.       GOSUB 50345
  1109.       GOSUB 22380
  1110.       ON AB GOTO 13243,13240,13238,13238
  1111. 13240 GOSUB 50340
  1112.       XX$ = "Deny use of 300 BAUD to registered users (YES OR NO) "
  1113.       GOSUB 50345
  1114.       GOSUB 22380
  1115.       ON AB GOTO 13242,13243,13240,13240
  1116. 13242 HJ$="YES=Registered users"
  1117. 13243 RESTRICT.BAUD$=HJ$
  1118.       RETURN
  1119. '
  1120. ' *****************************************************************************
  1121. ' * ALLOW THE SYSOP TO ELECT TO DISPLAY COLOR/GRAPHICS ON HIS LOCAL MONITOR   *
  1122. ' *****************************************************************************
  1123. '
  1124. 13245 XX$ = " Using ANSI.SYS for color/graphics on your color monitor (YES OR NO) "
  1125.       GOSUB 50345
  1126.       GOSUB 22380
  1127.       ON AB GOTO 13247,13247,13245,13245
  1128. 13247 USE.COLOR$=HJ$
  1129.       RETURN
  1130. '
  1131. ' *****************************************************************************
  1132. ' * ALLOW THE SYSOP TO ELECT TO GO OFF-LINE WHEN A DISK FULL CONDITIONS OCCURS*
  1133. ' *****************************************************************************
  1134. '
  1135. 13249 XX$ = "Should RBBS-PC go off-line when DISK FULL occurs (YES OR NO) "
  1136.       GOSUB 50345
  1137.       GOSUB 22380
  1138.       ON AB GOTO 13251,13251,13249,13249
  1139. 13251 DISKFULL.GO.OFFLINE$=HJ$
  1140.       RETURN
  1141. '
  1142. ' *****************************************************************************
  1143. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE     *
  1144. ' *****************************************************************************
  1145. '
  1146. 13253 XX$ = "Specify single drive in the range A->"+M$+" for "+A$
  1147.       GOSUB 50345
  1148.       LINE INPUT;HJ$
  1149.       IF LEN(HJ$) <> 1 THEN _
  1150.          GOTO 13253
  1151.       GOSUB 50654
  1152.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1153.          GOTO 13253
  1154.       RETURN
  1155. '
  1156. ' *****************************************************************************
  1157. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL                *
  1158. ' *****************************************************************************
  1159. '
  1160. 13260 XX$ = "Does your modem use the RTS signal for flow control (YES OR NO) " ' CPC15-1B
  1161.       GOSUB 50345                                                    ' CPC15-1B
  1162.       GOSUB 22380                                                    ' CPC15-1B
  1163.       ON AB GOTO 13270,13270,13260,13260                             ' CPC15-1B
  1164. 13270 RTS$ = HJ$                                                     ' CPC15-1B
  1165.       RETURN                                                         ' CPC15-1B
  1166. '
  1167. ' *****************************************************************************
  1168. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED                 *
  1169. ' *****************************************************************************
  1170. '
  1171. 13470 XX$ = "Specify download drives (max of" + STR$(MAXD) + " in the range A-> " + M$ + "). "
  1172.       GOSUB 50345
  1173.       LINE INPUT;HJ$
  1174.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1175.          GOTO 13470
  1176.       GOSUB 50654
  1177.       FOR I = 1 TO LEN(HJ$)
  1178.         A$(I) = MID$(HJ$,I,1)
  1179.       NEXT
  1180.       FOR I = 1 TO LEN(HJ$)
  1181.         IF A$(I) < "A" OR A$(I) > M$ THEN _
  1182.            GOTO 13470
  1183.       NEXT
  1184.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1185.       IF DNLD.SUB < 1 THEN _
  1186.          RETURN
  1187.       FOR I = 1 TO DNLD.SUB
  1188.         IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1189.            DNLD$(I) = ""
  1190.       NEXT
  1191.       STOPIT = DNLD.SUB
  1192.       FOR I = 1 TO STOPIT
  1193.         IF DNLD$(I) <> "" THEN _
  1194.            GOTO 13583
  1195.         DNLD$(I) = DNLD$(I + 1)
  1196.         DNLD$(I + 1) = ""
  1197. 13583 NEXT
  1198.       DNLD.SUB = 0
  1199.       FOR I = 1 TO STOPIT
  1200.         IF DNLD$(I) <> "" THEN _
  1201.            DNLD.SUB = DNLD.SUB + 1
  1202.       NEXT
  1203.       RETURN
  1204. '
  1205. ' *****************************************************************************
  1206. ' * DETERMINE THE NAME OF a DIRECTORY (A TEXT FILE)                           *
  1207. ' *****************************************************************************
  1208. '
  1209. 13590 A$ = "Name of " + A$ + " directory (8 char. max)."
  1210.       MAX = 8
  1211.       GOTO 13599
  1212. 13591 A$ = "Master directory name--used as ext. for others. (3 char. max)."
  1213. 13593 MAX = 3
  1214. 13599 XX$ = A$
  1215.       GOSUB 50345
  1216.       LINE INPUT;HJ$
  1217.       GOSUB 50654
  1218.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1219.          GOTO 13599
  1220.       I = 0
  1221.       GOSUB 25920
  1222.       IF I = 0 THEN _
  1223.          RETURN
  1224.       GOTO 13599
  1225. '
  1226. ' *****************************************************************************
  1227. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?             *
  1228. ' *****************************************************************************
  1229. '
  1230. 13750 XX$ = "Prompt bell default? (ON or OFF) "
  1231.       GOSUB 50345
  1232.       LINE INPUT;HJ$
  1233.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 3 THEN _
  1234.          GOTO 13750
  1235.       GOSUB 50654
  1236.       IF HJ$ = "ON"  THEN _
  1237.          GOTO 13820
  1238.       IF HJ$ = "OFF" THEN _
  1239.          GOTO 13820
  1240.       GOTO 13750
  1241. 13820 PROMPT.BELL$ = HJ$
  1242.       RETURN
  1243. '
  1244. ' *****************************************************************************
  1245. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)                 *
  1246. ' *****************************************************************************
  1247. '
  1248. 13840 XX$ = "Set maximum minutes a user can stay on the system "
  1249.       GOSUB 50345
  1250.       LINE INPUT;HJ$
  1251.       MINUTES.PER.SESSION! = VAL(HJ$)
  1252.       IF MINUTES.PER.SESSION! < 0 OR MINUTES.PER.SESSION! > 1440 THEN _
  1253.          GOTO 13840
  1254.       RETURN
  1255. '
  1256. ' ******************************************************************************
  1257. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED                *
  1258. ' ******************************************************************************
  1259. '
  1260. 13890 J = 999
  1261.       IF ((MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIUM.NUMBER.OF.NODES)/5)<J THEN _
  1262.          J = (MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIMUM.NUMBER.OF.NODES)/5
  1263.       GOSUB 50340
  1264.       XX$ = "Set maximum number of messages allowed (MAX = " + STR$(FIX(J)) + ")"
  1265.       GOSUB 50345
  1266.       LINE INPUT;HJ$
  1267.       MAX.ALLOWED.MSGS.FRM.DEF = VAL(HJ$)
  1268.       IF MAX.ALLOWED.MSGS.FRM.DEF < 1 AND _
  1269.          MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  1270.          GOTO 13890
  1271.       IF MAX.ALLOWED.MSGS.FRM.DEF > 0 AND _
  1272.          MAX.ALLOWED.MSGS.FRM.DEF < 1000 AND _
  1273.          MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1274.          GOTO 13929
  1275.       XX$ = "Increase the " + MAIN.MESSAGE.FILE$ + " file to " + STR$((MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES) + " records? (YES OR NO) "
  1276.       GOSUB 50345
  1277.       GOSUB 22380
  1278.       ON AB GOTO 13890,13927,13890,13890
  1279. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1280.       GOSUB 30450
  1281.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1282.       GOSUB 22080
  1283.       RETURN
  1284. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1285.       GOSUB 30450
  1286.       RETURN
  1287. '
  1288. ' *****************************************************************************
  1289. ' * IDENTIFY THE NUMBER OF MONTHS A USER CAN BE INACTIVE BEFORE HE IS PURGED  *
  1290. ' *****************************************************************************
  1291. '
  1292. 13940 XX$ = "Set number of months before an inactive user is purged. "
  1293.       GOSUB 50345
  1294.       LINE INPUT;HJ$
  1295.       ACT.MNTHS.B4.DELETING = VAL(HJ$)
  1296.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1297.          GOTO 13940
  1298.       RETURN
  1299. '
  1300. ' *****************************************************************************
  1301. ' * SPECIFY THE COMMUNICATIONS PORT TO BE USED (1 OR 2)                       *
  1302. ' *****************************************************************************
  1303. '
  1304. 14120 COMMIN = 1
  1305.       COMMAX = 2
  1306.       XX$ = "# of communication port to use (" + _
  1307.             MID$(STR$(COMMIN),2) + "-" + MID$(STR$(COMMAX),2) + _
  1308.             ", or 0 for LOCAL WORKSTATION)? "
  1309.       GOSUB 50345
  1310.       LINE INPUT;HJ$
  1311.       IF LEN(HJ$) <> 1 THEN _
  1312.          GOTO 14120
  1313.       X = FIX(VAL(MID$(HJ$,1,1)))
  1314.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1315.          GOTO 14120
  1316.       COM.PORT$ = "COM" + HJ$
  1317.       RETURN
  1318. '
  1319. ' *****************************************************************************
  1320. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES                     *
  1321. ' *****************************************************************************
  1322. '
  1323. 14790 GOSUB 15160
  1324.       DRIVE.FOR.BULLETINS$ = TB$
  1325.       GOSUB 14970
  1326.       BULLETIN.MENU$ = HJ$
  1327.       RETURN
  1328. '
  1329. ' *****************************************************************************
  1330. ' *  PREFIX USED TO NAME BULLETIN FILES                                       *
  1331. ' *****************************************************************************
  1332. '
  1333. 14800 GOSUB 14970
  1334.       IF LEN(HJ$) > 6 THEN _
  1335.          RETURN
  1336.       BULLETIN.PREFIX$ = HJ$
  1337.       RETURN
  1338. '
  1339. ' *****************************************************************************
  1340. ' *  DRIVE AND PATH FOR NINE MAJOR 'HELP' FILES                               *
  1341. ' *****************************************************************************
  1342. '
  1343. 14810 GOSUB 15200
  1344.       HELP.PATH$ = HJ$
  1345.       RETURN
  1346. '
  1347. ' *****************************************************************************
  1348. ' *  PREFIX FOR FOR NINE MAJOR 'HELP' FILES                                  *
  1349. ' *****************************************************************************
  1350. '
  1351. 14820 GOSUB 14970
  1352.       IF LEN(HJ$) > 7 THEN _
  1353.          RETURN
  1354.       HELP.FILE.PREFIX$ = HJ$
  1355.       RETURN
  1356. '
  1357. ' *****************************************************************************
  1358. ' *  NAME OF 'NEWUSER' FILE                                                   *
  1359. ' *****************************************************************************
  1360. '
  1361. 14825 A$ = "File extension for help files (max 3 chars)"
  1362.       GOSUB 13593
  1363.       HELP.EXTENSION$ = HJ$
  1364.       RETURN
  1365. 14830 GOSUB 17330
  1366.       NEWUSER.FILE$ = SJ$ + ":" + HJ$
  1367.       RETURN
  1368. '
  1369. ' *****************************************************************************
  1370. ' *  NAME OF 'WELCOME' FILE                                                   *
  1371. ' *****************************************************************************
  1372. '
  1373. 14840 GOSUB 17330
  1374.       WELCOME.FILE$ = SJ$ + ":" + HJ$
  1375.       RETURN
  1376. '
  1377. ' *****************************************************************************
  1378. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION                                *
  1379. ' *****************************************************************************
  1380. '
  1381. 14850 GOSUB 13591
  1382.       DIRECTORY.EXTENTION$ = HJ$
  1383.       RETURN
  1384. '
  1385. ' *****************************************************************************
  1386. ' *  NAME OF THE SYSOP'S MENU                                                 *
  1387. ' *****************************************************************************
  1388. '
  1389. 14860 GOSUB 17330
  1390.       MENU$(1) = SJ$ + ":" + HJ$
  1391.       RETURN
  1392. '
  1393. ' *****************************************************************************
  1394. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU                                  *
  1395. ' *****************************************************************************
  1396. '
  1397. 14870 GOSUB 17330
  1398.       MENU$(2) = SJ$ + ":" + HJ$
  1399.       RETURN
  1400. '
  1401. ' *****************************************************************************
  1402. ' *  NAME OF FILE SUBSECTION'S MENU                                           *
  1403. ' *****************************************************************************
  1404. '
  1405. 14880 GOSUB 17330
  1406.       MENU$(3) = SJ$ + ":" + HJ$
  1407.       RETURN
  1408. '
  1409. ' *****************************************************************************
  1410. ' *  NAME OF UTILITIES SUBSECTIN'S MENU                                       *
  1411. ' *****************************************************************************
  1412. '
  1413. 14890 GOSUB 17330
  1414.       MENU$(4) = SJ$ + ":" + HJ$
  1415.       RETURN
  1416. '
  1417. ' *****************************************************************************
  1418. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE                  *
  1419. ' *****************************************************************************
  1420. '
  1421. 14900 GOSUB 17330
  1422.       CONFERENCE.MENU$ = SJ$ + ":" + HJ$
  1423.       RETURN
  1424. '
  1425. ' *****************************************************************************
  1426. ' *  GET ANSWER MENU                                                          *
  1427. ' *****************************************************************************
  1428. '
  1429. 14905 GOSUB 17330
  1430.       ANS.MENU$ = SJ$+":"+HJ$
  1431.       RETURN
  1432. '
  1433. ' *****************************************************************************
  1434. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES                          *
  1435. ' *****************************************************************************
  1436. '
  1437. 14910 GOSUB 17330
  1438.       TRASHCAN.FILE$ = SJ$ + ":" + HJ$
  1439.       RETURN
  1440. '
  1441. ' *****************************************************************************
  1442. ' *  HELP FOR CATEGORIZING UPLOADS                                            *
  1443. ' *****************************************************************************
  1444. '
  1445. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1446.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1447.       CALL ALLCAPS (UPCAT.HELP$)
  1448.       RETURN
  1449. '
  1450. ' *****************************************************************************
  1451. ' *  DRIVE AVAILABLE FOR UPLOADING                                            *
  1452. ' *****************************************************************************
  1453. '
  1454.       ON AB GOTO 15940,15940,15920,15920
  1455. 14920 A$ = "uploading "
  1456.       GOSUB 13253
  1457.       DRIVE.FOR.UPLOADS$ = HJ$
  1458.       IF LEN(UPLOAD.SUBDIR$)>1 THEN _
  1459.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1460.       RETURN
  1461. '
  1462. ' *****************************************************************************
  1463. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG      *
  1464. ' *****************************************************************************
  1465. '
  1466. 14970 X$ = OPTION$
  1467. 14980 GOSUB 31060
  1468.       PRINT "Specify name of the file for option " + X$ + ". ";
  1469. 14990 LINE INPUT;HJ$
  1470.       GOSUB 50654
  1471.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1472.          GOTO 14980
  1473.       L1 = INSTR(HJ$,".")
  1474.       IF L1 = 0 THEN _
  1475.          IF LEN(HJ$) < 9 THEN _
  1476.             GOTO 15045 ELSE _
  1477.       GOTO 14980
  1478.       IF L1 > 9 THEN _
  1479.          GOTO 14980
  1480.       IF L1 < 2 THEN _
  1481.          GOTO 14980
  1482.       IF LEN(HJ$)-L1 > 3 THEN _
  1483.          GOTO 14980
  1484. 15045 I = 0
  1485.       GOSUB 25920
  1486.       IF I = 0 THEN _
  1487.          RETURN
  1488.       GOTO 14980
  1489. '
  1490. ' *****************************************************************************
  1491. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG  *
  1492. ' *****************************************************************************
  1493. '
  1494. 15160 X$ = OPTION$
  1495. 15170 XX$ = "Specify drive in the range A->" + M$ + " for option " + X$ + ". "
  1496.       GOSUB 50345
  1497.       LINE INPUT;HJ$
  1498.       IF LEN(HJ$) <> 1 THEN _
  1499.          GOTO 15170
  1500.       GOSUB 50654
  1501.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1502.          GOTO 15170
  1503.       TB$ = HJ$
  1504.       RETURN
  1505. '
  1506. ' *****************************************************************************
  1507. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH                            *
  1508. ' *****************************************************************************
  1509. '
  1510. 15200 X$ = OPTION$
  1511. 15205 CALL ASKRO ("Specify drive (A->"+M$+") and path for option "+X$+".",24,HJ$)
  1512.       IF LEN(HJ$) < 1 THEN 15205
  1513.       GOSUB 50654
  1514.       IF LEN(HJ$) = 1 THEN HJ$ = HJ$ + ":"
  1515.       IF MID$(HJ$,2,1)=":" THEN _
  1516.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN 15205
  1517.       IF INSTR(HJ$,"\")>0 THEN _
  1518.         IF RIGHT$(HJ$,1) <> "\" THEN HJ$ = HJ$ + "\"
  1519.       TB$ = HJ$
  1520.       RETURN
  1521. 15230 RETURN
  1522. '
  1523. ' *****************************************************************************
  1524. ' * ALLOW A SYSOP TO EXTEND A USER'S TIME FOR UPLOADS                         *
  1525. ' *****************************************************************************
  1526. '
  1527. 15234 XX$ = "Extend by what fraction of time uploading "
  1528.       GOSUB 50345
  1529.       LINE INPUT;HJ$
  1530.       IF VAL(HJ$) < 0 OR VAL(HJ$) > 10 THEN _
  1531.          GOTO 15234
  1532.       UPLOAD.TIME.FACTOR! = VAL(HJ$)
  1533.       RETURN
  1534. '
  1535. ' *****************************************************************************
  1536. ' * REQUEST NUMBER OF SECONDS TO WAIT AFTER INITIALIZING THE MODEM            *
  1537. ' *****************************************************************************
  1538. '
  1539. 15240 XX$ = "How many seconds of delay after modem initilization (1 to 99)?"
  1540.       GOSUB 50345
  1541.       LINE INPUT;HJ$
  1542.       B1 = VAL(HJ$)
  1543.       IF B1 < 1 OR B1 > 99 THEN _
  1544.          GOTO 15240
  1545.       MODEM.INIT.WAIT.TIME = B1
  1546.       RETURN
  1547. '
  1548. ' *****************************************************************************
  1549. ' * REQUEST NUMBER OF SECONDS TO DELAY PRIOR TO ISSUING MODEM COMMANDS        *
  1550. ' *****************************************************************************
  1551. '
  1552. 15250 XX$ = "# seconds to delay prior to issuing modem commands (0 to 99)?"
  1553.       GOSUB 50345
  1554.       LINE INPUT;HJ$
  1555.       B1 = VAL(HJ$)
  1556.       IF B1 < 0 OR B1 > 99 THEN _
  1557.          GOTO 15250
  1558.       MODEM.COMMAND.DELAY.TIME = B1
  1559.       RETURN
  1560. '
  1561. ' *****************************************************************************
  1562. ' * ALLOW THE SYSOP TO SPECIFY THE NUMBER OF ACTIVE BULLETINS                 *
  1563. ' *****************************************************************************
  1564. '
  1565. 15290 XX$ = "Enter number of active 'bulletins' (0 to 99)"
  1566.       GOSUB 50345
  1567.       LINE INPUT;HJ$
  1568.       B1% = VAL(HJ$)
  1569.       IF B1% < 0 OR B1% > 99 THEN _
  1570.          GOTO 15290
  1571.       ACTIVE.BULLETINS = B1%
  1572.       RETURN
  1573. '
  1574. ' *****************************************************************************
  1575. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE                                 *
  1576. ' *****************************************************************************
  1577. '
  1578. 15460 GOSUB 17330
  1579.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
  1580.          RETURN
  1581.       MAIN.MESSAGE.FILE$ = SJ$ + ":" + HJ$
  1582.       MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
  1583.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1584.       RETURN
  1585. '
  1586. ' *****************************************************************************
  1587. ' * DETERMINE THE NAME OF THE "CALLERS" FILE                                  *
  1588. ' *****************************************************************************
  1589. '
  1590. 15461 GOSUB 17330
  1591.       CALLERS.FILE$ = SJ$ + ":" + HJ$
  1592.       RETURN
  1593. '
  1594. ' *****************************************************************************
  1595. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE                                 *
  1596. ' *****************************************************************************
  1597. '
  1598. 15462 GOSUB 17330
  1599.       COMMENTS.FILE$ = SJ$ + ":" + HJ$
  1600.       RETURN
  1601. '
  1602. ' *****************************************************************************
  1603. ' * DETERMINE THE NAME OF THE "USERS" FILE                                    *
  1604. ' *****************************************************************************
  1605. '
  1606. 15500 GOSUB 17330
  1607.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
  1608.          RETURN
  1609.       MAIN.USER.FILE$ = SJ$ + ":" + HJ$
  1610.       MAINUSR$ = MAIN.USER.FILE$
  1611.       RETURN
  1612. '
  1613. ' *****************************************************************************
  1614. ' * ALLOW A SYSOP TO SPECIFY THE FOREGROUND COLOR FOR THE LOCAL COLOR MONITOR *
  1615. ' *****************************************************************************
  1616. '
  1617. 15530 XX$ = "Enter foreground color (0-15,see BASIC manual)"
  1618.       GOSUB 50345
  1619.       LINE INPUT;HJ$
  1620.       B1 = VAL(HJ$)
  1621.       IF B1 < 0 OR B1 > 15 THEN _
  1622.          GOTO 15530
  1623.       FG = B1
  1624.       RETURN
  1625. '
  1626. ' *****************************************************************************
  1627. ' * ALLOW A SYSOP TO SPECIFY THE BACKGROUND COLOR FOR THE LOCAL COLOR MONITOR *
  1628. ' *****************************************************************************
  1629. '
  1630. 15590 XX$ = "Enter background color (0-7,see BASIC manual)"
  1631.       GOSUB 50345
  1632.       LINE INPUT;HJ$
  1633.       B1 = VAL(HJ$)
  1634.       IF B1 < 0 OR B1 > 7 THEN _
  1635.          GOTO 15590
  1636.       BG = B1
  1637.       RETURN
  1638. '
  1639. ' *****************************************************************************
  1640. ' * ALLOW A SYSOP TO SPECIFY THE BORDER COLOR THE LOCAL COLOR MONITOR         *
  1641. ' *****************************************************************************
  1642. '
  1643. 15650 XX$ = "Enter the border color (0-7,see BASIC manual)"
  1644.       GOSUB 50345
  1645.       LINE INPUT;HJ$
  1646.       B1 = VAL(HJ$)
  1647.       IF B1 < 0 OR B1 > 7 THEN _
  1648.          GOTO 15650
  1649.       BORDER = B1
  1650.       RETURN
  1651. '
  1652. ' *****************************************************************************
  1653. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?                          *
  1654. ' *****************************************************************************
  1655. '
  1656. 15710 CLS
  1657.       GOSUB 15780
  1658.       A$ = "RBBS-PC to use modem commands you specified as follows:"
  1659.       IF M14$ = "YES" THEN _
  1660.      A$ ="RBBS-PC to use standard modem commands as follows:"
  1661.       PRINT A$
  1662.       PRINT ""
  1663.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1664.       PRINT ""
  1665.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1666.       PRINT "   Note: End item 2 with:"
  1667.       PRINT "     S0=1Q0X1 if answer on 0 rings"                     ' CPC15-1B
  1668.       PRINT "     S0=254 if answer on >0 rings (no ring-back)"
  1669.       PRINT "     S0=255 if answer on >0 rings (with ring-back)"
  1670.       PRINT ""
  1671.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1672.       PRINT ""
  1673.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1674.       PRINT ""
  1675.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1676.       PRINT ""
  1677.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1678.       PRINT ""
  1679.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1680.       PRINT "   Note: End item 7 with:"
  1681.       PRINT "     Q1 if item 2 ends with S0=255"
  1682.       PRINT ""
  1683.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1684.       XX$ = "Select command string to change (1 to 8, CR to end)"
  1685.       GOSUB 50345
  1686.       LINE INPUT;HJ$
  1687.       IF HJ$ = "" THEN _
  1688.          RETURN
  1689.       IF VAL(HJ$) <1 OR VAL(HJ$) > 8 THEN _
  1690.          GOTO 15710
  1691.       I = VAL(HJ$)
  1692.       XX$ = "Enter modem command for item" + STR$(I) + " :"
  1693.       GOSUB 50345
  1694.       LINE INPUT;HJ$
  1695.       GOSUB 50654
  1696.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1697. 15712 USER.RESET.COMMAND$ = HJ$
  1698.       GOTO 15710
  1699. 15714 USER.INIT.COMMAND$ = HJ$
  1700.       GOTO 15710
  1701. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1702.       GOTO 15710
  1703. 15718 USER.ANSWER.COMMAND$ = HJ$
  1704.       GOTO 15710
  1705. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1706.       GOTO 15710
  1707. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1708.       GOTO 15710
  1709. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1710.       GOTO 15710
  1711. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1712.       GOTO 15710
  1713. 15780 M14$ = "NO"
  1714.       IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
  1715.          MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
  1716.          MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
  1717.          MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=")-1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=")-1)  AND _
  1718.          MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
  1719.          FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
  1720.          FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
  1721.          FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
  1722.          M14$ = "YES"
  1723.       RETURN
  1724. 15790 FIRMWARE.INITIALIZE.COMMAND$= "AT&C1&D3B1E0V1M0S0=0&T5"
  1725.       FIRMWARE.CLEAR.COMMAND$    = "AT&F"
  1726.       FIRMWARE.WRITE.COMMAND$    = "&W"
  1727.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  1728.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  1729.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  1730.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$                       ' CPC15-1B
  1731.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  1732.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  1733.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  1734.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  1735.       RETURN
  1736. '
  1737. ' *****************************************************************************
  1738. ' * SHOULD USERS BE REMINDED OF THE MESSAGES THAT THEY LEFT?                  *
  1739. ' *****************************************************************************
  1740. '
  1741. 15800 XX$ = "Remind users of the messages they left? (YES or NO) "
  1742.       GOSUB 50345
  1743.       GOSUB 22380
  1744.       ON AB GOTO 15810,15810,15800,15800
  1745. 15810 MESSAGE.REMINDER$ = HJ$
  1746.       RETURN
  1747. '
  1748. ' *****************************************************************************
  1749. ' * SHOULD MACHINE LANGUAGE ROUTINES BE USED TO INCREASE SPEED?               *
  1750. ' *****************************************************************************
  1751. '
  1752. 15820 CALL GETYESNO ("Use machine language routines for speed",TURBO.RBBS$)
  1753.       RETURN
  1754. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1755.       RETURN
  1756. '
  1757. ' *****************************************************************************
  1758. ' * IS THE USER ALLOWED TO BYPASS THE SYSTEM BULLETINS?                       *
  1759. ' *****************************************************************************
  1760. '
  1761. 15840 XX$ = "Are system bulletins to be optional? (YES or NO) "
  1762.       GOSUB 50345
  1763.       GOSUB 22380
  1764.       ON AB GOTO 15860,15860,15840,15840
  1765. 15860 BULLETINS.OPTIONAL$ = HJ$
  1766.       RETURN
  1767. '
  1768. ' *****************************************************************************
  1769. ' * SHOULD USER'S BE PREVENTED FROM DOWNLOADING FILES IN ASCII?               *
  1770. ' *****************************************************************************
  1771. '
  1772. 15880 XX$ = "Is non-ascii protocol required for binary files? (YES or NO) "
  1773.       GOSUB 50345
  1774.       GOSUB 22380
  1775.       ON AB GOTO 15900,15900,15880,15880
  1776. 15900 REQUIRE.NON.ASCII$ = HJ$
  1777.       RETURN
  1778. '
  1779. ' *****************************************************************************
  1780. ' * IS MICROCOM'S MNP PROTOCOL TO BE MADE AVAILABLE?                          *
  1781. ' *****************************************************************************
  1782. '
  1783. 15911 XX$ = "Enable MICROCOM's MNP protocol? (YES or NO) "
  1784.       GOSUB 50345
  1785.       GOSUB 22380
  1786.       ON AB GOTO 15913,15913,15911,15911
  1787. 15913 MNP.SUPPORT$ = HJ$
  1788.       RETURN
  1789. '
  1790. ' *****************************************************************************
  1791. ' * SHOULD THE MAIN DIRECTORY (TEXT FILE) BE OMITTED FROM THE "NEW" COMMAND?  *
  1792. ' *****************************************************************************
  1793. '
  1794. 15920 XX$ = "Is " + DIRECTORY.EXTENTION$ + " omitted from the N)ew command? (YES or NO) "
  1795.       GOSUB 50345
  1796.       GOSUB 22380
  1797.       ON AB GOTO 15940,15940,15920,15920
  1798. 15940 OMIT.MAIN.DIRECTORY$ = HJ$
  1799.       RETURN
  1800. '
  1801. ' *****************************************************************************
  1802. ' * IS "EXTENDED" LOGGING TO THE CALLERS FILE TO BE ACTIVATED?                *
  1803. ' *****************************************************************************
  1804. '
  1805. 15991 XX$ = "Do you want EXTENDED logging to the 'callers' file (YES OR NO) "
  1806.       GOSUB 50345
  1807.       GOSUB 22380
  1808.       ON AB GOTO 15992,15992,15991,15991
  1809. 15992 EXTENDED.LOGGING$ = HJ$
  1810.       RETURN
  1811. '
  1812. ' *****************************************************************************
  1813. ' * ARE COMMENTS TO BE RECORDED AS PRIVATE MESSAGES IN THE MESSAGE FILE?      *
  1814. ' *****************************************************************************
  1815. '
  1816. 15993 XX$ = "Do you want 'comments' recorded as private messages (YES OR NO) "
  1817.       GOSUB 50345
  1818.       GOSUB 22380
  1819.       ON AB GOTO 15994,15994,15993,15993
  1820. 15994 COMMENTS.AS.MESSAGES$ = HJ$
  1821.       RETURN
  1822. '
  1823. ' *****************************************************************************
  1824. ' * CAN THE USER INTERRUPT THE "WELCOME" FILE DISPLAY WHEN HE LOGS ON?        *
  1825. ' *****************************************************************************
  1826. '
  1827. 16000 XX$ = "Is system 'welcome' interruptable (YES OR NO) "
  1828.       GOSUB 50345
  1829.       GOSUB 22380
  1830.       ON AB GOTO 16020,16020,16000,16000
  1831. 16020 WELCOME.INTERRUPTABLE$ = HJ$
  1832.       RETURN
  1833. '
  1834. ' *****************************************************************************
  1835. ' * HOW MANY SECONDS SHOULD USERS BE ALLOWED TO BE IDLE BEFORE LOGGING HIM OFF*
  1836. ' *****************************************************************************
  1837. '
  1838. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1839.       RETURN
  1840. '
  1841. ' *****************************************************************************
  1842. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON                                                                          *
  1843. ' *****************************************************************************
  1844. '
  1845. 16040 CLS
  1846.       LOCATE 5,5
  1847.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1848.       LOCATE 7,10
  1849.       PRINT "0.   IBM PC, IBM XT, or IBM AT"
  1850.       LOCATE 9,10
  1851.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1852.       LOCATE 11,10
  1853.       PRINT "2.   IBM PCjr
  1854.       LOCATE 13,10
  1855.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1856. 16050 GOSUB 50340
  1857.       XX$ = "Select environment (0 to 3, CR to end)"
  1858.       GOSUB 50345
  1859.       LINE INPUT;X$
  1860.       IF X$ = "" THEN _
  1861.          RETURN
  1862.       COMPUTER.TYPE = VAL(X$)
  1863. 16060 IF COMPUTER.TYPE < 0 OR COMPUTER.TYPE > 3 THEN _
  1864.          GOTO 16050
  1865. 16062 IF COMPUTER.TYPE = 0 THEN _
  1866.          COMPUTER.TYPE$ = "IBM PC, XT, or AT" : _
  1867.          RETURN
  1868.       IF COMPUTER.TYPE = 1 THEN _
  1869.          COMPUTER.TYPE$ = "Compaq/Plus" : _
  1870.          RETURN
  1871.       IF COMPUTER.TYPE = 2 THEN _
  1872.          COMPUTER.TYPE$ = "PCjr" : _
  1873.          GOTO 16071
  1874.       IF COMPUTER.TYPE = 3 THEN _
  1875.          COMPUTER.TYPE$ = "Other under PC-DOS"
  1876.       RETURN
  1877. 16071 PCJR = 0
  1878.       XX$ = "Is an IBM PCjr Internal Modem installed? (YES or NO)"
  1879.       GOSUB 50345
  1880.       GOSUB 22380
  1881.       ON AB GOTO 16072,16073,16071,16071
  1882. 16072 PCJR = 1
  1883. 16073 RETURN
  1884. '
  1885. ' *****************************************************************************
  1886. ' * CAN MODEM COMMANDS BE ISSUED EVEN WHEN THE MODEM IS RINGING?              *
  1887. ' *****************************************************************************
  1888. '
  1889. 16121 XX$ = "Wait to issue modem commands between rings? (YES OR NO) "
  1890.       GOSUB 50345
  1891.       GOSUB 22380
  1892.       ON AB GOTO 16123,16123,16121,16121
  1893. 16123 COMMANDS.BETWEEN.RINGS$ = HJ$
  1894.       RETURN
  1895. '
  1896. ' *****************************************************************************
  1897. ' * WHAT BAUD RATE SHOULD RBBS-PC INITIALLY OPEN THE MODEM AT?                *
  1898. ' *****************************************************************************
  1899. '
  1900. 16124 XX$ = "Enter baud rate (300, 1200, 2400, 4800, 9600) to open modem at "
  1901.       GOSUB 50345
  1902.       LINE INPUT;HJ$
  1903.       B1 = VAL(HJ$)
  1904.       IF B1 = 300 OR B1 = 1200 OR B1 = 2400 OR B1 = 4800 OR B1 = 9600 THEN _
  1905.          GOTO 16128 ELSE _
  1906.       GOTO 16124
  1907. 16128 MODEM.INIT.BAUD$ = MID$(STR$(B1),2)
  1908.       RETURN
  1909. '
  1910. ' *****************************************************************************
  1911. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'                    *
  1912. ' *****************************************************************************
  1913. '
  1914. 16130 GOSUB 17330
  1915.       MENU$(5) = SJ$ + ":" + HJ$
  1916.       RETURN
  1917. '
  1918. ' *****************************************************************************
  1919. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'         *
  1920. ' *****************************************************************************
  1921. '
  1922. 16140 GOSUB 17330
  1923.       RCTTY.BAT$ = SJ$ + ":" + HJ$
  1924.       RETURN
  1925. '
  1926. ' *****************************************************************************
  1927. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'            *
  1928. ' *****************************************************************************
  1929. '
  1930. 16150 GOSUB 17330
  1931.       RBBS.BAT$ = SJ$ + ":" + HJ$
  1932.       RETURN
  1933. '
  1934. ' *****************************************************************************
  1935. ' * DRIVE TO LOOK FOR 'COMMAND.COM' ON                                        *
  1936. ' *****************************************************************************
  1937. '
  1938. 16160 A$ = "COMMAND.COM "
  1939.       GOSUB 13253
  1940.       DISK.FOR.DOS$ = HJ$ + ":"
  1941.       RETURN
  1942. '
  1943. ' *****************************************************************************
  1944. ' * REDIRECT I/O VIA THE 'CTTY' COMMAND                                       *
  1945. ' *****************************************************************************
  1946. '
  1947. 16170 CALL GETYESNO ("Use the CTTY command to redirect I/O on dropping to DOS?",REDIRECT.IO.METHOD$)
  1948.       RETURN
  1949. '
  1950. ' *****************************************************************************
  1951. ' * INVOKE THE RBBS-PC 'DRIVERS' VIA THE SHELL COMMAND                        *
  1952. ' *****************************************************************************
  1953. '
  1954. 16180 CALL GETYESNO ("Use the SHELL command to invoke protocol drivers?",GO.TO.SHELL$)
  1955.       IF GO.TO.SHELL$ = "YES" THEN _
  1956.          GO.TO.SHELL$ = "SHELL" : _
  1957.          RETURN
  1958.       IF GO.TO.SHELL$ = "NO" THEN _
  1959.          GO.TO.SHELL$ = "EXIT RBBS-PC"                               ' CPC15-1B
  1960.       RETURN
  1961. '
  1962. ' *****************************************************************************
  1963. ' * SHOULD "DOORS" BE AVAILABLE?                                              *
  1964. ' *****************************************************************************
  1965. '
  1966. 16290 XX$ = "Is the 'door' subsystem available? (YES or NO) "
  1967.       GOSUB 50345
  1968.       GOSUB 22380
  1969.       ON AB GOTO 16310,16310,16290,16290
  1970. 16310 DOORS.AVAILABLE$ = HJ$
  1971.       IF DOORS.AVAILABLE$ = "NO" THEN _
  1972.          RETURN
  1973.       GOSUB 50340
  1974.       LOCATE 24,1
  1975.       PRINT "Will you be running RBBS-PC under MultiLink from The Software Link? ";
  1976.       GOSUB 22380
  1977.       ON AB GOTO  16340,16350,16290,16290
  1978. 16340 DELAY! = FNTI! + 15
  1979. '
  1980. ' *****************************************************************************
  1981. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"              *
  1982. ' *****************************************************************************
  1983. '
  1984.       CLS
  1985.       PRINT "                ******Warning******"
  1986.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1987.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1988.       PRINT "communication port!  Unless the software that you invoke via
  1989.       PRINT "the RBBS-PC 'door' mechanism monitors the communication line,"
  1990.       PRINT "your system will be vulnerable to being hung -- and worse!!!"
  1991.       PRINT "If you don't THROUGHLY understand the section in RBBS-PC's"
  1992.       PRINT "documentation which discusses the pitfalls of opening RBBS-PC's"
  1993.       PRINT "'doors' to your users, DON'T use 'doors'!!!!!"
  1994. 16345 IF FNTI! < DELAY! THEN _
  1995.          GOTO 16345
  1996.       CLS
  1997.       PRINT "                ******Warning******"
  1998.       PRINT "Some environments require that you set the modem to answer"
  1999.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  2000.       PRINT "using doors because if a user in a door gets disconnected"
  2001.       PRINT "the modem is set to answer on the very next ring and someone who"
  2002.       PRINT "you may not want in the door or in DOS will find themselves"
  2003.       PRINT "able to do you grevious harm.  If you have this type of environ-"
  2004.       PRINT "ment and insist on using 'doors' or dropping to DOS remotely,"
  2005.       PRINT "you may now choose to shoot yourself in the foot (or any other"
  2006.       PRINT "part of the anatomy that is appropriate for such foolhardiness)."
  2007.       CALL GETYESNO ("Do you want to shoot yourself in the foot",SHOOT.YOURSELF$)
  2008.       RETURN
  2009. 16350 CLS
  2010. '
  2011. ' *****************************************************************************
  2012. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC UNDER MULTI-LINK     *
  2013. ' *****************************************************************************
  2014. '
  2015.       PRINT "Multi-Link is a software product of The Software Link, Inc. located"
  2016.       PRINT "at 8601 Dunwoody Place, Suite 632, Atlanta, Georgia  30338.  It allows"
  2017.       PRINT "IBM's DOS 2.x, or 3.x on the IBM PC to become a multi-tasking operating"
  2018.       PRINT "system.  The Capital PC User Group has no connection whatsoever with"
  2019.       PRINT "this company or it's products.  In fact The Software Link has only"
  2020.       PRINT "occasionally sent updates of it's new releases to me.  RBBS-PC has"
  2021.       PRINT "only been tested under Release 3.02 of MultiLink and earlier versions
  2022.       PRINT "of MultiLink.  I feel strongly that IBM's DOS for the PC should be"
  2023.       PRINT "multi-tasking.  Because MultiLink provides this capability for the widest
  2024.       PRINT "ranges of DOS software for the IBM PC, RBBS-PC has been enhanced"
  2025.       PRINT "to run under Multi-Link.  Any questions regarding RBBS-PC under Multi-Link"
  2026.       PRINT "(other than Release 3.02 of Multi-Link) should be directed to The
  2027.       PRINT "Software Link's customer support group at (404) 998-0788."
  2028.       PRINT ""
  2029.       PRINT "I have run RBBS-PC under Multi-Link since December 1983 -- since Multi-Link"
  2030.       PRINT "release 2.04.  Since Multi-Link release 2.06 I HAVE NEVER HAD A SYSTEM CRASH
  2031.       PRINT "due to Multi-Link.  I think it is a quality product but a bit over-priced."
  2032.       PRINT "My opnion on Multi-Link's price reflects my prejudice that all PC software"
  2033.       PRINT "should be relatively inexpensive."
  2034.       PRINT ""
  2035.       PRINT SPC(60);"Tom Mack
  2036.       PRINT SPC(60);"May, 25, 1986"
  2037. 16360 LOCATE 23,1
  2038.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  2039. 16370 GOSUB 50340
  2040.       LOCATE 24,1
  2041.       PRINT "Enter Multi-Link terminal type for DOORS ";
  2042.       GOSUB 17420
  2043.       DOORS.TERMINAL.TYPE = B1
  2044.       IF DOORS.TERMINAL.TYPE < 0 THEN _
  2045.          GOTO 16370
  2046.       IF DOORS.TERMINAL.TYPE > 12 THEN _
  2047.          GOTO 16370
  2048.       RETURN
  2049. '
  2050. ' *****************************************************************************
  2051. ' * SHOULD USERS BE LIMITED TO A MAXIMUM AMOUNT OF TIME ON THE SYSTEM EACH DAY*
  2052. ' *****************************************************************************
  2053. '
  2054. 16650 XX$ = "Limit the maximum time a users can be on each day? (YES or NO) "
  2055.       GOSUB 50345
  2056.       GOSUB 22380
  2057.       ON AB GOTO 16670,16670,16650,16650
  2058. 16670 LIMIT.DAILY.TIME$ = HJ$
  2059.       RETURN
  2060. '
  2061. ' *****************************************************************************
  2062. ' * SHOULD USERS BE REMINDED OF THE NUMBER FILE TRANSFERS THAT THEY HAVE DONE?*
  2063. ' *****************************************************************************
  2064. '
  2065. 16690 XX$ = "Remind users of # uploads and downloads? (YES or NO) "
  2066.       GOSUB 50345
  2067.       GOSUB 22380
  2068.       ON AB GOTO 16710,16710,16690,16690
  2069. 16710 REMIND.FILE.TRANSFERS$ = HJ$
  2070.       RETURN
  2071. '
  2072. ' *****************************************************************************
  2073. ' * SHOULD USERS BE REMINDED OF THEIR TERMINAL'S PROVILE?                     *
  2074. ' *****************************************************************************
  2075. '
  2076. 16722 XX$ = "Remind users of their terminal's profile? (YES or NO) "
  2077.       GOSUB 50345
  2078.       GOSUB 22380
  2079.       ON AB GOTO 16724,16724,16722,16722
  2080. 16724 REMIND.PROFILE$ = HJ$
  2081.       RETURN
  2082. '
  2083. ' *****************************************************************************
  2084. ' * ALLOW THE SYSOP TO SELECT "DUMB" MODEM (BUT WITH AUTO-ANSWER) MODE        *
  2085. ' *****************************************************************************
  2086. '
  2087. 16725 XX$ = "Are you using a non-Hayes auto-answer only modem? (YES or NO) "
  2088.       GOSUB 50345
  2089.       GOSUB 22380
  2090.       ON AB GOTO 16726,16726,16725,16725
  2091. 16726 DUMB.MODEM$ = HJ$
  2092.       RETURN
  2093. '
  2094. ' *****************************************************************************
  2095. ' * SELECT A DEFAULT USER'S PAGE LENGTH                                       *
  2096. ' *****************************************************************************
  2097. '
  2098. 16730 XX$ = "Default user page length?(a value between 0 and 255)"
  2099.       GOSUB 50345
  2100.       LINE INPUT;HJ$
  2101.       B1 = VAL(HJ$)
  2102.       IF B1 < 0 OR B1 > 255 THEN _
  2103.          GOTO 16730
  2104.       PAGE.LENGTH = B1
  2105.       RETURN
  2106. '
  2107. ' *****************************************************************************
  2108. ' * SPECIFY THE MAXIMUM NUMBER OF LINES ALLOWED PER MESSAGE                   *
  2109. ' *****************************************************************************
  2110. '
  2111. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  2112.       RETURN
  2113. '
  2114. ' *****************************************************************************
  2115. ' * MINIMUM SECURITY LEVEL TO GET ONTO RBBS-PC                                *
  2116. ' *****************************************************************************
  2117. '
  2118. 17160 GOSUB 18730
  2119.       GOSUB 17410
  2120.       MINIMUM.LOGON.SECURITY = B1
  2121.       RETURN
  2122. '
  2123. ' *****************************************************************************
  2124. ' * DEFAULT SECURITY LEVEL FOR NEW USERS                                      *
  2125. ' *****************************************************************************
  2126. '
  2127. 17170 GOSUB 18730
  2128.       GOSUB 17410
  2129.       DEFAULT.SECURITY.LEVEL = B1
  2130.       RETURN
  2131. '
  2132. ' *****************************************************************************
  2133. ' * SECURITY LEVEL FOR SYSOP                                                  *
  2134. ' *****************************************************************************
  2135. '
  2136. 17180 GOSUB 18730
  2137.       GOSUB 17410
  2138.       SYSOP.SECURITY.LEVEL = B1
  2139.       RETURN
  2140. '
  2141. ' *****************************************************************************
  2142. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY                         *
  2143. ' *****************************************************************************
  2144. '
  2145. 17190 GOSUB 17330
  2146.       FILESEC.FILE$ = SJ$ + ":" + HJ$
  2147.       RETURN
  2148. '
  2149. ' *****************************************************************************
  2150. ' * MINIMUM SECURITY LEVEL TO SEE THE SYSOP MENU                              *
  2151. ' *****************************************************************************
  2152. '
  2153. 17200 GOSUB 18730
  2154.       GOSUB 17410
  2155.       SYSOP.MENU.SECURITY.LEVEL = B1
  2156.        RETURN
  2157. '
  2158. ' *****************************************************************************
  2159. ' * MINIMUM SECURITY LEVEL TO USE 'DOORS'                                     *
  2160. ' *****************************************************************************
  2161. '
  2162. 17210 GOSUB 18730
  2163.       GOSUB 17410
  2164.       DOORS.SECURITY.LEVEL = B1
  2165.       RETURN
  2166. '
  2167. ' *****************************************************************************
  2168. ' * MAXIMUM NUMBER OF SECURITY VIOLATIONS ALLOWED IN A SINGLE SESSION         *
  2169. ' *****************************************************************************
  2170. '
  2171. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  2172.       RETURN
  2173. '
  2174. ' *****************************************************************************
  2175. ' *  ASSIGN SECURITY LEVELS TO THE SYSOP COMMANDS                             *
  2176. ' *****************************************************************************
  2177. '
  2178. 17230 CO$ = "SYSOP"
  2179.       IF IPAGE = 2 THEN _
  2180.          XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2181.       ELSE_
  2182.          XX$ = "ALL " + CO$ + " commands have security? (YES or NO)"
  2183.       GOSUB 50345
  2184.       GOSUB 22380
  2185.       ON AB GOTO 17232,17231,17230,17230
  2186. 17231 IF IPAGE = 2 THEN _
  2187.           SYSOP.COMMANDS$ = SYSOP.COMMANDS.DEFAULTS$ : _
  2188.           FOR I = 1 TO NUM.SYSOP : _
  2189.               SYSOP.FUNCTION$(I,2) = MID$(SYSOP.COMMANDS$,I,1) : _
  2190.           NEXT : _
  2191.           RETURN
  2192.       HJ$ = "all " + CO$ + " commands"
  2193.       GOSUB 17410
  2194.       FOR I = 1 TO NUM.SYSOP
  2195.           SYSOP.FUNCTION(I) = B1
  2196.       NEXT
  2197.       SF = B1
  2198.       RETURN
  2199. 17232 GOSUB 25180
  2200.       IROW = 4
  2201.       ICOL = 10
  2202.       FOR I = 1 TO NUM.SYSOP
  2203.          LOCATE IROW+I,ICOL
  2204.          IF IPAGE <> 2 THEN _
  2205.             PRINT SYSOP.FUNCTION$(I,1) + STR$(SYSOP.FUNCTION(I))_
  2206.          ELSE _
  2207.             PRINT SYSOP.FUNCTION$(I,1);" ";SYSOP.FUNCTION$(I,2)
  2208.       NEXT
  2209. 17233 GOSUB 25210
  2210.       IF X$ = "" THEN _
  2211.          RETURN
  2212.       FF = VAL(X$)
  2213.       IF (FF < 1 OR FF > NUM.SYSOP) THEN _
  2214.          GOTO 17233
  2215.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2216.       GOSUB 17410
  2217.       IF IPAGE = 2 THEN _
  2218.          SYSOP.FUNCTION$(FF,2) = HK$ : _
  2219.          MID$(SYSOP.COMMANDS$,FF,1) = HK$ _
  2220.       ELSE _
  2221.          SYSOP.FUNCTION(FF) = B1
  2222.       GOTO 17232
  2223. '
  2224. ' *****************************************************************************
  2225. ' *  ASSIGN SECURITY LEVELS TO THE MAIN MENU'S COMMANDS                       *
  2226. ' *****************************************************************************
  2227. '
  2228. 17240 CO$ = "Main Menu"
  2229.       IF IPAGE = 2 THEN _
  2230.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2231.       ELSE_
  2232.         XX$ = "ALL " + CO$ + " commands have SAME security? (YES or NO)"
  2233.       GOSUB 50345
  2234.       GOSUB 22380
  2235.       ON AB GOTO 17242,17241,17240,17240
  2236. 17241 IF IPAGE = 2 THEN _
  2237.         MAIN.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ : _
  2238.         FOR I = 1 TO NUM.MAIN : _
  2239.            MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1) : _
  2240.         NEXT : _
  2241.         RETURN
  2242.       HJ$ = "all " + CO$ + " commands"
  2243.       GOSUB 17410
  2244.       FOR I = 1 TO NUM.MAIN
  2245.           MAIN.FUNCTION(I) = B1
  2246.       NEXT
  2247.       MM = B1
  2248.       RETURN
  2249. 17242 GOSUB 25180
  2250.       IROW = 4
  2251.       ICOL = 10
  2252.       FOR I = 1 TO NUM.MAIN
  2253.          LOCATE IROW+I,ICOL
  2254.          IF IPAGE = 2 THEN _
  2255.            PRINT MAIN.FUNCTION$(I,1);" ";MAIN.FUNCTION$(I,2);_
  2256.          ELSE _
  2257.            PRINT MAIN.FUNCTION$(I,1);STR$(MAIN.FUNCTION(I));
  2258.       NEXT
  2259. 17243 GOSUB 25210
  2260.       IF X$ = "" THEN _
  2261.          RETURN
  2262.       SWAP HJ$,X$
  2263.       GOSUB 50654
  2264.       SWAP HJ$,X$
  2265.       FF = INSTR(MAIN.COMMANDS.DEFAULTS$,X$)
  2266.       IF FF = 0 THEN _
  2267.          GOTO 17243
  2268.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2269.       GOSUB 17410
  2270.       IF IPAGE = 2 THEN _
  2271.         MAIN.FUNCTION$(FF,2) = HK$ : _
  2272.         MID$(MAIN.COMMANDS$,FF,1) = HK$ _
  2273.       ELSE _
  2274.         MAIN.FUNCTION(FF) = B1
  2275.       GOTO 17242
  2276. '
  2277. ' *****************************************************************************
  2278. ' *  ASSIGN SECURITY LEVELS TO THE FILE MENU'S COMMANDS                       *
  2279. ' *****************************************************************************
  2280. '
  2281. 17250 CO$ = "File Menu"
  2282.       IF IPAGE = 2 THEN _
  2283.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
  2284.       ELSE_
  2285.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"
  2286.       GOSUB 50345
  2287.       GOSUB 22380
  2288.       ON AB GOTO 17252,17251,17250,17250
  2289. 17251 IF IPAGE = 2 THEN _
  2290.         FILE.COMMANDS$ = FILE.COMMANDS.DEFAULTS$ : _
  2291.         FOR I=1 TO NUM.FILES : _
  2292.           FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1) : _
  2293.         NEXT : _
  2294.         RETURN
  2295.       HJ$ = "all " + CO$ + " commands"
  2296.       GOSUB 17410
  2297.       FOR I = 1 TO NUM.FILES
  2298.          FILES.FUNCTION(I) = B1
  2299.       NEXT
  2300.       FC = B1
  2301.       RETURN
  2302. 17252 GOSUB 25180
  2303.       IROW = 4
  2304.       ICOL = 10
  2305.       FOR I = 1 TO NUM.FILES
  2306.          LOCATE IROW+I,ICOL
  2307.          IF IPAGE = 2 THEN _
  2308.            PRINT FILES.FUNCTION$(I,1);" ";FILES.FUNCTION$(I,2);_
  2309.          ELSE_
  2310.            PRINT FILES.FUNCTION$(I,1);STR$(FILES.FUNCTION(I));
  2311.       NEXT
  2312. 17253 GOSUB 25210
  2313.       IF X$ = "" THEN _
  2314.          RETURN
  2315.       SWAP HJ$,X$
  2316.       GOSUB 50654
  2317.       SWAP HJ$,X$
  2318.       FF = INSTR(FILE.COMMANDS.DEFAULTS$,X$)
  2319.       IF FF = 0 THEN _
  2320.          GOTO 17253
  2321.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2322.       GOSUB 17410
  2323.       IF IPAGE = 2 THEN _
  2324.         FILES.FUNCTION$(FF,2) = HK$ : _
  2325.         MID$(FILE.COMMANDS$,FF,1) = HK$ _
  2326.       ELSE _
  2327.         FILES.FUNCTION(FF) = B1
  2328.       GOTO 17252
  2329. '
  2330. ' *****************************************************************************
  2331. ' *  ASSIGN SECURITY LEVELS TO THE UTILITY MENU'S COMMANDS                    *
  2332. ' *****************************************************************************
  2333. '
  2334. 17260 CO$ = "Utilities"
  2335.       IF IPAGE <> 2 THEN _
  2336.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
  2337.       ELSE_
  2338.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
  2339.       GOSUB 50345
  2340.       GOSUB 22380
  2341.       ON AB GOTO 17262,17261,17260,17260
  2342. 17261 IF IPAGE = 2 THEN _
  2343.         UTIL.COMMANDS$ = UTIL.COMMANDS.DEFAULTS$ : _
  2344.         FOR I = 1 TO NUM.UTILITY : _
  2345.            UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1) : _
  2346.         NEXT : _
  2347.         RETURN
  2348.         HJ$ = "all " + CO$ + " commands"
  2349.       GOSUB 17410
  2350.             FOR I = 1 TO NUM.UTILITY
  2351.          UTILITY.FUNCTION(I) = B1
  2352.       NEXT
  2353.       UE = B1
  2354.       RETURN
  2355. 17262 GOSUB 25180
  2356.       IROW = 4
  2357.       ICOL = 10
  2358.       FOR I = 1 TO NUM.UTILITY
  2359.          LOCATE IROW+I,ICOL
  2360.          IF IPAGE <> 2 THEN_
  2361.             PRINT UTILITY.FUNCTION$(I,1);STR$(UTILITY.FUNCTION(I))_
  2362.          ELSE_
  2363.             PRINT UTILITY.FUNCTION$(I,1);" ";UTILITY.FUNCTION$(I,2)
  2364.       NEXT
  2365. 17263 GOSUB 25210
  2366.       IF X$ = "" THEN _
  2367.          RETURN
  2368.       SWAP HJ$,X$
  2369.       GOSUB 50654
  2370.       SWAP HJ$,X$
  2371.       FF = INSTR(UTIL.COMMANDS.DEFAULTS$,X$)
  2372.       IF FF = 0 THEN _
  2373.          GOTO 17263
  2374.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2375.       GOSUB 17410
  2376.       IF IPAGE = 2 THEN_
  2377.         UTILITY.FUNCTION$(FF,2) = HK$ : _
  2378.         MID$(UTIL.COMMANDS$,FF,1) = HK$ _
  2379.       ELSE _
  2380.         UTILITY.FUNCTION(FF) = B1
  2381.       GOTO 17262
  2382. '
  2383. ' *****************************************************************************
  2384. ' *  ASSIGN SECURITY LEVELS TO GLOBAL COMMANDS                                *
  2385. ' *****************************************************************************
  2386. '
  2387. 17264 CO$ = "Global"
  2388.       IF IPAGE <> 2 THEN _
  2389.         XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
  2390.       ELSE_
  2391.         XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
  2392.       GOSUB 50345
  2393.       GOSUB 22380
  2394.       ON AB GOTO 17266,17265,17264,17264
  2395. 17265 IF IPAGE = 2 THEN _
  2396.         GLOBAL.COMMANDS$ = GLOBAL.COMMANDS.DEFAULTS$ : _
  2397.         FOR I = 1 TO NUM.GLOBAL : _
  2398.           GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1) : _
  2399.         NEXT : _
  2400.         RETURN
  2401.       HJ$ = "all " + CO$ + " commands"
  2402.       GOSUB 17410
  2403.       FOR I = 1 TO NUM.GLOBAL
  2404.          GLOBAL.FUNCTION(I) = B1
  2405.       NEXT
  2406.       GB = B1
  2407.       RETURN
  2408. 17266 GOSUB 25180
  2409.       IROW = 4
  2410.       ICOL = 10
  2411.       FOR I = 1 TO NUM.GLOBAL
  2412.          LOCATE IROW+I,ICOL
  2413.          IF IPAGE = 2 THEN_
  2414.            PRINT GLOBAL.FUNCTION$(I,1);" ";GLOBAL.FUNCTION$(I,2)_
  2415.          ELSE_
  2416.            PRINT GLOBAL.FUNCTION$(I,1);STR$(GLOBAL.FUNCTION(I))
  2417.       NEXT
  2418. 17267 GOSUB 25210
  2419.       IF X$ = "" THEN _
  2420.          RETURN
  2421.       SWAP HJ$,X$
  2422.       GOSUB 50654
  2423.       SWAP HJ$,X$
  2424.       FF = INSTR(GLOBAL.COMMANDS.DEFAULTS$,X$)
  2425.       IF FF = 0 THEN _
  2426.          GOTO 17267
  2427.       HJ$ = "all " + CO$ + " '" + X$ + "' commands"
  2428.       GOSUB 17410
  2429.       IF IPAGE = 2 THEN _
  2430.          GLOBAL.FUNCTION$(FF,2) = HK$ : _
  2431.          MID$(GLOBAL.COMMANDS$,FF,1) = HK$ _
  2432.       ELSE _
  2433.          GLOBAL.FUNCTION(FF) = B1
  2434.       GOTO 17266
  2435. '
  2436. ' *****************************************************************************
  2437. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES*
  2438. ' *****************************************************************************
  2439. '
  2440. 17270 GOSUB 17330
  2441.       PASSWORD.FILE$ = SJ$ + ":" + HJ$
  2442.       RETURN
  2443. '
  2444. ' *****************************************************************************
  2445. ' *  MAXIMUM NUMBER OF TEMPORARY PASSWORD CHANGES ALLOWED IN A SINGLE SESSION *
  2446. ' *****************************************************************************
  2447. '
  2448. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2449.       RETURN
  2450. '
  2451. ' *****************************************************************************
  2452. ' * MINIMUM SECURITY LEVEL IN ORDER TO TEMPORARILY CHANGE PASSWORDS           *
  2453. ' *****************************************************************************
  2454. '
  2455. 17300 GOSUB 18730
  2456.       GOSUB 17410
  2457.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = B1
  2458.       RETURN
  2459. '
  2460. ' *****************************************************************************
  2461. ' * MINIMUM SECURITY LEVEL REQUIRED TO OVERWRITE FILES WHEN UPLOADING         *
  2462. ' *****************************************************************************
  2463. '
  2464. 17310 HJ$ = "overwriting files on upload"
  2465.       GOSUB 17410
  2466.       OVERWRITE.SECURITY.LEVEL = B1
  2467.       RETURN
  2468. '
  2469. ' *****************************************************************************
  2470. ' * SECURITY LEVEL THAT IS EXEMPT FROM BEING PURGED WHEN PACKING USER FILE    *
  2471. ' *****************************************************************************
  2472. '
  2473. 17316 GOSUB 18730
  2474.       GOSUB 17410
  2475.       SEC.LVL.EXEMPT.FRM.PURGING = B1
  2476.       RETURN
  2477. '
  2478. ' *****************************************************************************
  2479. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION         *
  2480. ' *****************************************************************************
  2481. '
  2482. 17330 X$ = OPTION$
  2483.       XX$ = "Specify drive (A->" + M$ + ") where file for option " + X$ + " will be located. "
  2484.       GOSUB 50345
  2485.       LINE INPUT;HJ$
  2486.       IF LEN(HJ$) <> 1 THEN _
  2487.          HJ$ = X$ : _
  2488.          GOTO 17330
  2489.       GOSUB 50654
  2490.       IF HJ$<"A" OR HJ$>M$ THEN _
  2491.          HJ$ = X$ : _
  2492.          GOTO 17330
  2493.       SJ$ = HJ$
  2494.       GOSUB 14980
  2495.       RETURN
  2496. '
  2497. ' *****************************************************************************
  2498. ' * STANDARD ROUTINE TO REQUEST A SECURITY LEVEL FOR A SPECIFIC COMMAND       *
  2499. ' *****************************************************************************
  2500. '
  2501. 17410 GOSUB 50340
  2502.       LOCATE 24,1
  2503.       XX$ = "Security level for " + HJ$ + " is? "
  2504.       IF IPAGE = 2 THEN _
  2505.          XX$ = "New command for " + HJ$ + " is? "
  2506.       PRINT XX$;
  2507. 17420 LINE INPUT;HK$
  2508.       IF HK$ = "" THEN HK$ = " "
  2509.       IF IPAGE = 2 AND LEN(HK$) < 2 THEN _
  2510.          RETURN
  2511.       IF IPAGE = 2 THEN _
  2512.          GOTO 17410
  2513.       B1 = VAL(HK$)
  2514.       IF B1 = 0 AND HK$ <> "0" THEN _
  2515.          GOTO 17410
  2516.       RETURN
  2517. '
  2518. ' *****************************************************************************
  2519. ' * COMMON SUBROUTINE TO DISPLAY OPTION                                       *
  2520. ' *****************************************************************************
  2521. '
  2522. 17500 CALL GETYESNO ("Show section in command prompt",SHOW.SECTION$)
  2523.       RETURN
  2524. 17550 CALL GETYESNO ("Show commands in command prompt",COMMANDS.IN.PROMPT$)
  2525.       RETURN
  2526. 17560 CALL GETYESNO ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS$)
  2527.       RETURN
  2528. 17570 CALL GETYESNO ("Add new users to USERS file",REMEMBER.NEW.USERS$)
  2529.       RETURN
  2530. 17580 CALL GETYESNO ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM$)
  2531.       RETURN
  2532. 17590 CALL GETYESNO ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS$)
  2533.       RETURN
  2534. 17600 CALL GETYESNO ("Enable download of new files at logon",NEW.FILES.CHECK$)
  2535.       RETURN
  2536. 17610 CALL GETYESNO ("Turn printer off after each recycle",TURN.PRINTER.OFF$)
  2537.       RETURN
  2538. '
  2539. ' *****************************************************************************
  2540. ' *  GET REQUIRED QUESTIONNAIRE THAT ALL CALLERS MUST ANSWER ONCE             *
  2541. ' *****************************************************************************
  2542. '
  2543. 17620 CALL GETYESNO ("Play music themes for RBBS functions",MUSIC$)
  2544.       RETURN
  2545. 17630 CALL GETYESNO ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE$)
  2546.       RETURN
  2547. 17640 CALL GETNUMYN ("Use EXTERNAL XMODEM (rather than RBBS's)",USE.EXTERNAL.XMODEM)
  2548.       RETURN
  2549. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2550.       RETURN
  2551. 17700 CALL ASKRO ("Name of questionnaire all callers must answer once",24,_
  2552.                    REQUIRED.QUESTIONNAIRE$)
  2553.       CALL ALLCAPS (REQUIRED.QUESTIONNAIRE$)
  2554.       RETURN
  2555. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2556.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2557. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2558.         BEEP : _
  2559.         GOTO 18000
  2560.       IF START.HASH = 1 THEN _
  2561.         HASH.ID$ = "(NAME)"_
  2562.       ELSE_
  2563.         HASH.ID$ = "(nonstandard)"
  2564.       RETURN
  2565. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2566.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2567. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2568.         INDIV.ID$ = "(none)"_
  2569.       ELSE_
  2570.         INDIV.ID$ = "(nonstandard)"
  2571.       RETURN
  2572. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2573.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2574.           DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2575.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2576.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2577.       RETURN
  2578. 18300 GOSUB 15200
  2579.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2580.       DIR.CATEGORY.FILE$ = TB$ + DIR.CATEGORY.FILE$
  2581.       RETURN
  2582. 18350 CALL ASKRO ("Copy upload description to (Drive/path/name)",24,ALWAYS.STREW.TO$)
  2583.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2584.       RETURN
  2585. 18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
  2586.       RETURN
  2587. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2588.       RETURN
  2589. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2590.       RETURN
  2591. '
  2592. ' *****************************************************************************
  2593. ' *  GET UPLOAD DIRECTORY DRIVE/PATH                                          *
  2594. ' *****************************************************************************
  2595. '
  2596. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2597.       RETURN
  2598. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2599.       RETURN
  2600. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2601.       RETURN
  2602. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2603.       RETURN
  2604. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2605.       RETURN
  2606. '
  2607. ' *****************************************************************************
  2608. ' *  GET UPLOAD DIRECTORY DRIVE/PATH                                          *
  2609. ' *****************************************************************************
  2610. '
  2611. 18550 GOSUB 15200
  2612.       UPLOAD.PATH$ = HJ$
  2613.       RETURN
  2614. 18600 GOSUB 15200
  2615.       DIRECTORY.PATH$ = HJ$
  2616.       RETURN
  2617. 18620 GOSUB 15200
  2618.       PROTOCOL.PATH$ = HJ$
  2619.       IF INSTR(PROTOCOL.PATH$,"\") > 0 THEN _
  2620.          IF RIGHT$(PROTOCOL.PATH$,1) <> "\" THEN _
  2621.             PROTOCOL.PATH$ = PROTOCOL.PATH$ + "\"
  2622.       RETURN
  2623. '
  2624. ' *****************************************************************************
  2625. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE              *
  2626. ' *****************************************************************************
  2627. '
  2628. 18730 HJ$ = "option " + HJ$
  2629.       RETURN
  2630. '
  2631. ' *****************************************************************************
  2632. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE              *
  2633. ' *****************************************************************************
  2634. '
  2635. 19189 IF F = 2 THEN _
  2636.          GOSUB 22560 : _
  2637.          RETURN
  2638.       GOSUB 22100
  2639.       RETURN
  2640. '
  2641. ' *****************************************************************************
  2642. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR*
  2643. ' *****************************************************************************
  2644. '
  2645. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2646.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2647.          RETURN
  2648.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2649.       GOSUB 30610
  2650.       RETURN
  2651. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (128-4096)",128,4096,BUFFER.SIZE)
  2652.       RETURN
  2653. '
  2654. ' *****************************************************************************
  2655. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN                        *
  2656. ' *****************************************************************************
  2657. '
  2658. 21810 CLS
  2659.       LOCATE 3,5
  2660.       PRINT "RBBS-PC is supported in the following:"
  2661.       LOCATE 5,20
  2662.       PRINT "Environment"
  2663.       LOCATE 7,10
  2664.       PRINT "0. Single RBBS-PC in an IBM DOS environment"
  2665.       LOCATE 9,10
  2666.       PRINT "1. MultiLink (multi-tasking under single DOS)
  2667.       LOCATE 11,10
  2668.       PRINT "2. Omninet (CORVUS)"
  2669.       LOCATE 13,10
  2670.       PRINT "3. PC-NET (Orchid)"
  2671.       LOCATE 15,10
  2672.       PRINT "4. DESQview (Quarterdeck)"
  2673.       LOCATE 17,10
  2674.       PRINT "5. 10 NET (Fox Research)"
  2675.       LOCATE 19,10
  2676.       PRINT "6. IBM DOS (3.1 or above) file sharing not supported"
  2677. 21870 GOSUB 50340
  2678.       XX$ = "Select environment (0 to 6, CR to end)"
  2679.       GOSUB 50345
  2680.       LINE INPUT;X$
  2681.       IF X$ = "" THEN _
  2682.          RETURN
  2683.       NETWORK.TYPE = VAL(X$)
  2684.       GOSUB 21890
  2685.       RETURN
  2686. 21890 IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 6 THEN _
  2687.          GOTO 21870
  2688. 21895 IF NETWORK.TYPE = 0 THEN _
  2689.          NETWORK.TYPE$ = "IBM's DOS"
  2690. 21900 IF NETWORK.TYPE = 1 THEN _
  2691.          NETWORK.TYPE$ = "MultiLink"
  2692.       IF NETWORK.TYPE = 2 THEN _
  2693.          NETWORK.TYPE$ = "Omninet"
  2694.       IF NETWORK.TYPE = 3 THEN _
  2695.          NETWORK.TYPE$ = "PC-NET"
  2696.       IF NETWORK.TYPE = 4 THEN _
  2697.          NETWORK.TYPE$ = "DESQview"
  2698.       IF NETWORK.TYPE = 5 THEN _
  2699.          NETWORK.TYPE$ = "10 NET"
  2700.       IF NETWORK.TYPE = 6 THEN _
  2701.          NETWORK.TYPE$ = "IBM's file sharing -- future"
  2702.       IF DONT.ASK THEN _
  2703.          RETURN
  2704.       IF NETWORK.TYPE > 1 AND NETWORK.TYPE < 6 THEN _
  2705.          CALL GETYESNO ("Are you running Multi-Link with " + NETWORK.TYPE$,MLCOM$) : _
  2706.          MLCOM = FALSE : _
  2707.          IF MLCOM$ = "YES" THEN _
  2708.             MLCOM = TRUE
  2709.       RETURN
  2710. '
  2711. ' *****************************************************************************
  2712. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE              *
  2713. ' *****************************************************************************
  2714. '
  2715. 21910 IF F = 2 THEN _
  2716.          GOSUB 22560 : _
  2717.          RETURN
  2718.       GOSUB 22100
  2719.       RETURN
  2720. '
  2721. ' *****************************************************************************
  2722. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF  *
  2723. ' *****************************************************************************
  2724. '
  2725. 21950 GOSUB 50340
  2726.       XX$ = "How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? "
  2727.       GOSUB 50345
  2728.       LINE INPUT;HJ$
  2729.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2730.          GOTO 21950
  2731.       GOSUB 50654
  2732.       IF LEFT$(HJ$,1) = "S" THEN _
  2733.          HJ$ = "SYSTEM" : _
  2734.          RECYCLE.TO.DOS = 1 : _
  2735.          GOTO 22020
  2736.       IF LEFT$(HJ$,1) = "I" THEN _
  2737.          HJ$ = "INTERNAL" : _
  2738.          RECYCLE.TO.DOS = 0 : _
  2739.          GOTO 22020
  2740.       GOTO 21950
  2741. 22020 RECYCLE.TO.DOS$ = HJ$
  2742.       RETURN
  2743. '
  2744. ' *****************************************************************************
  2745. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE *
  2746. ' *****************************************************************************
  2747. '
  2748. 22040 GOSUB 50340
  2749.       XX$ = "Max. records in preformatted " + MAIN.MESSAGE.FILE$ + " file (>" + STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):"
  2750.       GOSUB 50345
  2751.       LINE INPUT;HJ$
  2752.       B3! = VAL(HJ$)
  2753.       IF B3! <= (5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2754.          B3! > 9999999! THEN _
  2755.          GOTO 22040
  2756. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2757.       GOSUB 30610
  2758.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2759.       RETURN
  2760. '
  2761. ' *****************************************************************************
  2762. ' * BUILD THE USERS FILE TO SUIT                                              *
  2763. ' *****************************************************************************
  2764. '
  2765. 22100 GOSUB 50340
  2766.       FF = CURRENT.USER.COUNT
  2767.       IF FF > 1 THEN _
  2768.          FF = FF-1
  2769.       GOSUB 50340
  2770.       XX$ = STR$(FF) + " of" + STR$(HIGHEST.USER.RECORD) + _
  2771.             " records used. Enter new maximum number of records for " + _
  2772.             MAIN.USER.FILE$ + ":"
  2773.       GOSUB 50345
  2774.       LINE INPUT;HJ$
  2775. 22120 B1 = VAL(HJ$)
  2776.       IF B1 < 1 OR B1 > 99999! OR B1 < FF THEN _
  2777.          GOTO 22100
  2778. 22140 B2 = 2
  2779.       WHILE B2 < B1
  2780.         B2 = B2 * 2
  2781.       WEND
  2782.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2783.          RETURN
  2784.       XX$ = "Change " + MAIN.USER.FILE$ + " file to" + STR$(B2) + " records? (YES or NO)"
  2785.       GOSUB 50345
  2786.       GOSUB 22380
  2787.       ON AB GOTO 22100,22150,22100,22100
  2788. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2789.       D.FLAG = -1
  2790.       GOSUB 24110
  2791.       IB = 1
  2792.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2793.       HIGHEST.USER.RECORD = B2
  2794.       GOSUB 30450
  2795.       GOSUB 50340
  2796.       RETURN
  2797. '
  2798. ' *****************************************************************************
  2799. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S    *
  2800. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.      *
  2801. ' *****************************************************************************
  2802. '
  2803. 22160 I! = FRE(C$)
  2804.       Y$ = INKEY$
  2805.       IX = 0
  2806.       IF LEN(Y$) < 1 THEN _
  2807.          GOTO 22160
  2808.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  2809.          GOTO 22240
  2810.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  2811.          IX = 22 : _
  2812.          RETURN
  2813.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  2814.          HJ$ = LEFT$(HJ$,LEN(HJ$)-1) : _
  2815.          PRINT CHR$(29) + " " + CHR$(29); : _
  2816.          GOTO 22160
  2817.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  2818.          GOTO 22160
  2819.       PRINT Y$;
  2820.       HJ$ = HJ$ + Y$
  2821.       OPTION$ = HJ$
  2822.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  2823.          IX = 22                          ' RETURN
  2824.       RETURN
  2825. '
  2826. ' *****************************************************************************
  2827. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT    *
  2828. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG                               *
  2829. ' *****************************************************************************
  2830. '
  2831. 22240 IX = ASC(RIGHT$(Y$,1))
  2832.       Y$ = "
  2833.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  2834.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  2835.          RETURN
  2836.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  2837.          IX = 19 : _
  2838.          RETURN
  2839.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  2840.          IX = 21 : _
  2841.          RETURN
  2842.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  2843.          IX = 20 : _
  2844.          RETURN
  2845.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  2846.          IX = IX-58 : _                   ' THROUGH 10 ACCORDINGLY.
  2847.          RETURN
  2848.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  2849.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  2850.             IX = IX - 73 : _              ' ACCORDINGLY.
  2851.             RETURN
  2852.       IX = 0
  2853.       RETURN
  2854. '
  2855. ' *****************************************************************************
  2856. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA                       *
  2857. ' *****************************************************************************
  2858. '
  2859. 22340 LOCATE 22,1
  2860.       PRINT SPACE$(79);
  2861.       LOCATE 22,15
  2862.       PRINT SPC(64);
  2863.       LOCATE 22,15
  2864.       PRINT TIME$;" ";
  2865.       COLOR 0,7
  2866.       PRINT " Reading Data, Wait a sec !!! ";
  2867.       COLOR FG,BG,BORDER
  2868.       RETURN
  2869. '
  2870. ' *****************************************************************************
  2871. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT     *
  2872. ' *****************************************************************************
  2873. '
  2874. 22350 GOSUB 50340
  2875.       XX$ = "Are you satisfied with all changes ? (Y/N) or <Q>uit "
  2876.       GOSUB 50345
  2877.       GOSUB 22380
  2878.       ON AB GOTO 12190,59000,60360,22350
  2879. 22380 LINE INPUT;HJ$
  2880.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2881.          GOTO 22470
  2882.       GOSUB 50654
  2883.       IF HJ$ = "NO" THEN _
  2884.          AB = 1 : _
  2885.          RETURN
  2886.       IF HJ$ = "N" THEN _
  2887.          HJ$ = "NO" : _
  2888.          AB = 1 : _
  2889.          RETURN
  2890.       IF HJ$ = "YES"  THEN _
  2891.          AB = 2 : _
  2892.          RETURN
  2893.       IF HJ$ = "Y" THEN _
  2894.          HJ$ = "YES" : _
  2895.          AB = 2 : _
  2896.          RETURN
  2897.       IF HJ$ = "QUIT" THEN _
  2898.          AB = 3 : _
  2899.          RETURN
  2900.       IF HJ$ = "Q" THEN _
  2901.          AB = 3 : _
  2902.          RETURN
  2903. 22470 AB = 4
  2904.       RETURN
  2905. '
  2906. ' *****************************************************************************
  2907. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH                *
  2908. ' *****************************************************************************
  2909. '
  2910. 22480 GOSUB 50340
  2911.       XX$ = "To which copy of RBBS-PC will these options apply (1 to 36)?"
  2912.       GOSUB 50345
  2913.       LINE INPUT;HJ$
  2914.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 2  THEN _
  2915.          GOTO 22480
  2916.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 36 THEN _
  2917.          GOTO 22480
  2918.       MID$(CONFIG.FILENAME$,5,1) = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2919.       RETURN
  2920. '
  2921. ' *****************************************************************************
  2922. ' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE                                 *
  2923. ' *****************************************************************************
  2924. '
  2925. 22550 GOSUB 50340
  2926.       XX$ = "Option " + _
  2927.             OPTION$ + _
  2928.             " unavailable with CONFIG " + CONFIG.VERSION$ +"!"
  2929.       GOSUB 50345
  2930.       DELAY! = FNTI! + 5
  2931.       GOSUB 60440
  2932.       RETURN
  2933. '
  2934. ' *****************************************************************************
  2935. ' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE FOR PUBLIC CONFERENCES          *
  2936. ' *****************************************************************************
  2937. '
  2938. 22560 GOSUB 50340
  2939.       XX$ = "Option " + _
  2940.             OPTION$ + _
  2941.             " unavailable when maintaining a public conference!"
  2942.       GOSUB 50345
  2943.       DELAY! = FNTI! + 5
  2944.       GOSUB 60440
  2945.       RETURN
  2946. '
  2947. ' *****************************************************************************
  2948. ' * REBUILD THE USER FILE                                                     *
  2949. ' *****************************************************************************
  2950. '
  2951. 22570 IF F = 2 THEN _
  2952.          GOSUB 22560 : _
  2953.          RETURN
  2954.       D.FLAG = 0
  2955.       GOSUB 24110
  2956.       RETURN
  2957. '
  2958. ' *****************************************************************************
  2959. ' * PACK THE MESSAGES FILE                                                    *
  2960. ' *****************************************************************************
  2961. '
  2962. 23160 B1 = MAXIMUM.NUMBER.OF.NODES
  2963.       B3! = HIGHEST.MESSAGE.RECORD
  2964.       PURGE = -1
  2965.       GOSUB 30610
  2966.       RETURN
  2967. '
  2968. ' *****************************************************************************
  2969. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE                      *
  2970. ' *****************************************************************************
  2971. '
  2972. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
  2973.       RETURN
  2974. '
  2975. ' *****************************************************************************
  2976. ' * REPAIR THE MESSAGES FILE                                                  *
  2977. ' *****************************************************************************
  2978. '
  2979. 23620 RB = 1
  2980. '
  2981. ' *****************************************************************************
  2982. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE                             *
  2983. ' *****************************************************************************
  2984. '
  2985. 23630 SK = 0
  2986.       GOSUB 30040              ' <----Print message headers
  2987.       OPEN "R",1,MAIN.MESSAGE.FILE$
  2988.       FIELD 1,128 AS MESSAGE.RECORD$
  2989.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  2990.         GET 1,I
  2991.         IF VAL(MID$(MESSAGE.RECORD$,117,6)) > 0 AND _
  2992.            SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2993.            SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2994.            GOSUB 23610 ELSE _
  2995.         GOTO 23725
  2996.         I$ = "K"
  2997.         IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2998.            I$ = "A
  2999.         IF LOC(1) > NEXT.MESSAGE.RECORD-1 THEN _
  3000.            GOTO 23730
  3001.         PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  3002.               MID$(MESSAGE.RECORD$,76,25) + " " + _
  3003.               MID$(MESSAGE.RECORD$,101,15) + " " + _
  3004.               I$ + " " + _
  3005.               MID$(MESSAGE.RECORD$,117,6) + " " + _
  3006.               STR$(LOC(1)) + " "  + _
  3007.               STR$(I)
  3008.         SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  3009.         IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  3010.            GOTO 23730
  3011.         IF RB THEN _
  3012.            GOSUB 50580
  3013. 23725 NEXT
  3014. 23730 GET 1,1
  3015.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  3016.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  3017.       PUT 1,1
  3018.       CLOSE 1
  3019.       DELAY! = FNTI! + 5
  3020.       GOSUB 60440
  3021.       RETURN
  3022. '
  3023. ' *****************************************************************************
  3024. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE                     *
  3025. ' *****************************************************************************
  3026. '
  3027. 23731 LOCATE 25,5
  3028.       PRINT "Setting Hayes 2400 firmware switches for RBBS-PC on " + COM.PORT$;
  3029.       DELAY! = FNTI! + 3
  3030.       GOSUB 60440
  3031. '
  3032. ' *****************************************************************************
  3033. ' *                                                                           *
  3034. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:      *
  3035. ' *                                                                           *
  3036. ' *           &C1       = Indicate carrier detect if user is on-line          *
  3037. ' *           &D3       = Use these settings when DTR drops                   *
  3038. ' *           B1        = Use Bell 212A when 1200 Baud is detected            *
  3039. ' *           E0        = Do not echo modem commands back to the PC           *
  3040. ' *           V1        = Issue long form of results codes                    *
  3041. ' *           M0        = Disable the speaker                                 *
  3042. ' *                                                                           *
  3043. ' *****************************************************************************
  3044. '
  3045. 23732 A$ = USER.INITIALIZE.COMMAND$
  3046.       IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,3)) = 255 THEN _
  3047.          A$ = A$ + "Q1"  ' Don't send results to the PC
  3048. 23734 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
  3049.       PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
  3050.       DELAY! = FNTI! + 3
  3051.       GOSUB 60440
  3052.       PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
  3053.       GOSUB 60440
  3054. 23739 CLOSE #3
  3055.       LOCATE 25,5
  3056.       PRINT SPACE$(74);
  3057.       LOCATE 25,5
  3058.       PRINT "Modem's firmware set as specified in parameter 205 for "+M13$;
  3059.       IA!=FNTI!+3
  3060.       GOSUB 60440
  3061.       RETURN
  3062. '
  3063. ' *****************************************************************************
  3064. ' * ROUTINE TO RENUMBER THE MESSAGE FILE                                      *
  3065. ' *****************************************************************************
  3066. '
  3067. 23740 GOSUB 30040
  3068. 23750 GOSUB 50340
  3069.       XX$ = "Renumber starting with OLD message # (<" + STR$(CALLS.TODATE! + 1) + ")"
  3070.       GOSUB 50345
  3071.       LINE INPUT;HJ$
  3072.       IF HJ$ = "" THEN _
  3073.          RETURN
  3074.       B1 = VAL(HJ$)
  3075.       IF B1 < 1 OR B1 > CALLS.TODATE! THEN _
  3076.          GOTO 23750
  3077.       RE = B1
  3078. 23810 GOSUB 50340
  3079.       XX$ = "Renumber starting with NEW message # "
  3080.       GOSUB 50345
  3081.       LINE INPUT;HJ$
  3082.       IF HJ$ = "" THEN _
  3083.          RETURN
  3084.       B1 = VAL(HJ$)
  3085.       IF B1 < 1 OR B1 > 9999 THEN _
  3086.          GOTO 23810
  3087.       NE = B1-1
  3088.       OPEN "R",1,MAIN.MESSAGE.FILE$
  3089.       FIELD 1,128 AS MESSAGE.RECORD$
  3090.       GOSUB 50340
  3091.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  3092.         GET 1,I
  3093.         IF INSTR(MESSAGE.RECORD$,CHR$(225)) OR _
  3094.            INSTR(MESSAGE.RECORD$,CHR$(226)) THEN _
  3095.            GOSUB 24010 : _
  3096.            GOSUB 23610
  3097.       NEXT
  3098.       GET 1,1
  3099.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  3100.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  3101.       PUT 1,1
  3102.       CLOSE 1
  3103.       DELAY! = FNTI! + 1
  3104.       GOSUB 60440
  3105.       RETURN
  3106. 24010 LOCATE 24,15
  3107.       PRINT "Msg #" + MID$(MESSAGE.RECORD$,1,5);
  3108.       IF VAL(MID$(MESSAGE.RECORD$,2,4))<RE THEN _
  3109.          PRINT " read"; : _
  3110.          RETURN
  3111.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  3112.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  3113.       NE = NE + 1
  3114.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  3115.       MID$(MESSAGE.RECORD$,1,1) = Y$
  3116.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  3117.       PUT 1,I
  3118.       RETURN
  3119. '
  3120. ' *****************************************************************************
  3121. ' * ROUTINE TO PACK THE USERS FILE                                            *
  3122. ' *****************************************************************************
  3123. '
  3124. 24020 OPEN "R",1,MAIN.USER.FILE$,128
  3125.       FIELD 1,  31 AS USER.NAME$, _
  3126.                 15 AS PASSWORD$, _
  3127.                  2 AS SECURITY.LEVEL$, _
  3128.                 14 AS USER.OPTIONS$, _
  3129.                 24 AS CITY.STATE$, _
  3130.                 19 AS MACHINE.TYPE$, _
  3131.                 14 AS LAST.DATE.TIME.ON$, _
  3132.                  3 AS LIST.NEW.DATE$, _
  3133.                  2 AS USER.DOWNLOADS$, _
  3134.                  2 AS USER.UPLOADS$, _
  3135.                  2 AS ELASPED.TIME$
  3136.       FIELD 1, 128 AS USER.RECORD$
  3137.       RETURN
  3138. '
  3139. ' *****************************************************************************
  3140. ' *  SHARED ROUTINE TO SET UP USER PROCESSING                                 *
  3141. ' *****************************************************************************
  3142. '
  3143. 24025 IF LEN.HASH < 7 THEN NU = LEN.HASH ELSE NU = 7
  3144.       NEW.USER$ = LEFT$("NEWUSER",NU)
  3145.       EMPTY.USER$ = SPACE$(NU)
  3146.       DELETED.USER$ = LEFT$("deleted user",NU)
  3147.       COMP.USER$ = EMPTY.USER$
  3148.       RETURN
  3149. '
  3150. ' *****************************************************************************
  3151. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT        *
  3152. ' *****************************************************************************
  3153. '
  3154. 24050 GOSUB 24020
  3155.       GOSUB 24025
  3156.       A! = HIGHEST.USER.RECORD
  3157.       XX$ = "Processing Record #"
  3158.       GOSUB 50345
  3159.       X = POS(0)+1
  3160.       FOR J=1 TO A!
  3161.         GET 1,J
  3162.         LOCATE 24,X
  3163.         PRINT J;
  3164. 24051   HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  3165.         LSET COMP.USER$ = HASH.VALUE$
  3166. 24052   IF ASC(HASH.VALUE$) = 0 OR _
  3167.            COMP.USER$ = NEW.USER$ OR _
  3168.            COMP.USER$ = EMPTY.USER$ OR _
  3169.            COMP.USER$ = DELETED.USER$ THEN _
  3170.              GOTO 24055
  3171.         USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  3172.         USER.OPTIONS = USER.OPTIONS AND 255      'Zero out only flag 6
  3173.         MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  3174.         PUT 1,J
  3175. 24055 NEXT
  3176.       CLOSE 1
  3177.       RETURN
  3178. 24110 GOSUB 30040
  3179.       GOSUB 24020
  3180.       GOSUB 50350
  3181.       A$ = F$
  3182.       GOSUB 50095
  3183.       OPEN "R",2,A$,128
  3184.       FIELD 2,  31 AS USER.NAME.N$, _
  3185.                 15 AS PASSWORD.N$, _
  3186.                  2 AS SECURITY.LEVEL.N$, _
  3187.                 14 AS USER.OPTIONS.N$, _
  3188.                 24 AS CITY.STATE.N$, _
  3189.                 19 AS MACHINE.TYPE.N$, _
  3190.                 14 AS LAST.DATE.TIME.ON.N$, _
  3191.                  3 AS LIST.NEW.DATE.N$, _
  3192.                  2 AS USER.DOWN.LOADS.N$, _
  3193.                  2 AS USER.UPLOADS.N$, _
  3194.                  2 AS ELAPSED.TIME.N$
  3195.       FIELD 2, 128 AS USER.RECORD.N$
  3196.       CURRENT.MONTH = VAL(LEFT$(DATE$,2))
  3197.       GOSUB 50340
  3198.       A! = 0
  3199.       GOSUB 50840
  3200.       A! = HIGHEST.USER.RECORD
  3201.       CURRENT.USER.COUNT = 1
  3202.       GOSUB 24025
  3203. 24112 FOR J  =  1 TO A!
  3204.         GET 1
  3205. 24114   HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  3206.         LSET COMP.USER$ = HASH.VALUE$
  3207.         IF ASC(HASH.VALUE$) = 0 OR _
  3208.            COMP.USER$ = NEW.USER$ OR _
  3209.            COMP.USER$ = EMPTY.USER$ OR _
  3210.            COMP.USER$ = DELETED.USER$ THEN _
  3211.            A$ = "" : _
  3212.            GOTO 24430
  3213.         IF D.FLAG THEN _
  3214.            GOTO 24290
  3215.         SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  3216.         IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  3217.            GOTO 24290                           ' copy users exempt from purges
  3218.         IF SECURITY.LEVEL <= MINIMUM.LOGON.SECURITY THEN _
  3219.            GOTO 24290                                 ' copy "locked-out" users
  3220. 24116   MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2))
  3221.         MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH-MONTH.OF.LAST.LOGON
  3222.         IF MONTHS.SINCE.LAST.LOGON < 0 THEN _
  3223.            MONTHS.SINCE.LAST.LOGON = MONTHS.SINCE.LAST.LOGON + 12
  3224.         IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  3225.            A$ = "(Last on " + LAST.DATE.TIME.ON$ + ")" : _           '
  3226.            GOTO 24430                                     'Purge inactive users
  3227. 24290   PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + " copied .... ";
  3228.         GOSUB 50720
  3229.         GOTO 24450
  3230. 24430   PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + "        purged... " + A$
  3231. 24450 NEXT
  3232.       CLOSE 1,2
  3233.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  3234.       GOSUB 30450
  3235. 24730 XX$ = "Delete the old " + MAIN.USER.FILE$ + " file? (YES or NO)?"
  3236.       GOSUB 50345
  3237.       GOSUB 22380
  3238.       ON AB GOTO 24750,24770,24730,24730
  3239. 24750 A$ = MAIN.USER.FILE$
  3240.       GOSUB 50096
  3241.       NAME MAIN.USER.FILE$ AS A$
  3242.       GOTO 24780
  3243. 24770 KILL MAIN.USER.FILE$
  3244. 24780 GOSUB 50350
  3245.       A$ = F$
  3246.       GOSUB 50095
  3247.       NAME A$ AS MAIN.USER.FILE$
  3248.       RETURN
  3249. ' *****************************************************************************
  3250. ' *            CHECK VALIDITY OF FMS DIRECTORY                                *
  3251. ' *****************************************************************************
  3252. 24790 CALL CHKFMSDIR (DIRECTORY.PATH$+FMS.DIRECTORY$+"."+DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  3253.       RETURN
  3254. '
  3255. ' *****************************************************************************
  3256. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS                  *
  3257. ' *****************************************************************************
  3258. '
  3259. 24800 CLS
  3260.       I! = FRE(C$)
  3261.       COLOR 0,7,0
  3262.       LOCATE 1,10
  3263.       PRINT "RBBS-PC CPC15.1 Default Configuration " + CONFIG.VERSION$;
  3264.       IF F THEN _
  3265.          GOSUB 24970
  3266.       COLOR FG,BG,BORDER
  3267.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  3268.       RETURN
  3269. 24890 A$ = "Enter parameter number to change, END to update, PgUp/PgDn to scroll.
  3270. 24900 LOCATE 24,1
  3271.       PRINT A$;
  3272.       PRINT STRING$((79-LEN(A$)),32);
  3273.       LOCATE 24,LEN(A$) + 1
  3274.       COLOR FG,BG,BORDER
  3275.       HJ$ = "
  3276.       I! = FRE(C$)
  3277.       RETURN
  3278. '
  3279. ' *****************************************************************************
  3280. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS       *
  3281. ' *****************************************************************************
  3282. '
  3283. 24970 LOCATE 2,1
  3284.       PRINT SPACE$(10)
  3285.       LOCATE 2,10
  3286.       A$ = "Private"
  3287.       IF F = 2 THEN _
  3288.          A$ = "Public"
  3289.       COLOR 31,0,0
  3290.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  3291.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF")-1) + _
  3292.             ")";
  3293.       RETURN
  3294. '
  3295. ' *****************************************************************************
  3296. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES          *
  3297. ' *****************************************************************************
  3298. '
  3299. 25020 XX$ = "In file " + MAIN.USER.FILE$ + " " + A$ + " record"
  3300.       GOSUB 50345
  3301.       X = POS(0)+1
  3302.       RETURN
  3303. 25030 IF PURGE THEN _
  3304.          RETURN
  3305.       XX$ = A$ + " file " + MAIN.MESSAGE.FILE$ + " record"
  3306.       GOSUB 50345
  3307.       X = 5 + LEN(XX$)
  3308.       RETURN
  3309. '
  3310. ' *****************************************************************************
  3311. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE          *
  3312. ' *****************************************************************************
  3313. '
  3314. 25040 GOSUB 50340
  3315.       REFRESH = 0
  3316.       IF F = 0 THEN _
  3317.          GOTO 25050
  3318.       XX$ = "End conference maintenance? (YES or NO)"
  3319.       GOSUB 50345
  3320.       GOSUB 22380
  3321.       ON AB GOTO 25050,25044,25142,25142
  3322. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3323.       MAIN.USER.FILE$ = MAINUSR$
  3324.       REFRESH = 1
  3325.       RETURN
  3326. 25050 XX$ = "Enter the name of the conference (seven characters or less) "
  3327.       GOSUB 50345
  3328.       LINE INPUT;HJ$
  3329.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3330.          GOTO 25040
  3331.       GOSUB 50654
  3332.       CP$ = HJ$
  3333. 25080 GOSUB 50340
  3334. 25090 XX$ = "Specify drive (A->" + M$ + ") containing this conference's files. "
  3335.       GOSUB 50345
  3336.       LINE INPUT;HJ$
  3337.       IF LEN(HJ$) <> 1 THEN _
  3338.          GOTO 25080
  3339.       GOSUB 50654
  3340.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  3341.          GOTO 25090
  3342.       CP$ = HJ$ + ":" + CP$
  3343.       MAIN.MESSAGE.FILE$ = CP$ + "M.DEF
  3344. 25141 GOSUB 50340
  3345. 25142 XX$ = "Is this a private conference? (YES or NO)"
  3346.       GOSUB 50345
  3347.       GOSUB 22380
  3348.       ON AB GOTO 25144,25160,25141,25141
  3349. 25144 F = 2
  3350.       GOTO 25170
  3351. 25160 F = 1
  3352.       UG = 0
  3353.       MAIN.USER.FILE$ = CP$ + "U.DEF"
  3354. 25170 REFRESH = 2
  3355.       RETURN
  3356. '
  3357. ' *****************************************************************************
  3358. ' * COMMON ROUTINE TO DISPLAY SUBSYSTEM COMMANDS AND THEIR SECURITY LEVELS    *
  3359. ' *****************************************************************************
  3360. '
  3361. 25180 CLS
  3362.       I! = FRE(C$)
  3363.       COLOR 0,7,0
  3364.       LOCATE 1,23
  3365.       PRINT "RBBS-PC CPC15.1 Default Configuration";
  3366.       COLOR FG,BG,BORDER
  3367.       LOCATE  2,5
  3368.       PRINT "The RBBS-PC " + CO$ + " Commands are as follows:
  3369.       LOCATE   3,10
  3370.       XX$ = "Command             Security"
  3371.       IF IPAGE = 2 THEN _
  3372.          XX$ = "Description         Command"
  3373.       PRINT XX$
  3374.       RETURN
  3375. '
  3376. ' *****************************************************************************
  3377. ' * COMMON ROUTINE TO ASK FOR FIRST CHARACTER OF A COMMAND                    *
  3378. ' *****************************************************************************
  3379. '
  3380. 25210 XX$ = "Enter first character of command (CR to end)"
  3381.       GOSUB 50345
  3382.       LINE INPUT;X$
  3383.       RETURN
  3384. '
  3385. ' *****************************************************************************
  3386. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES                   *
  3387. ' *****************************************************************************
  3388. '
  3389. 25380 XX$ = "Will you be using DOS sub-directories? (YES or NO) "
  3390.       GOSUB 50345
  3391.       GOSUB 22380
  3392.       ON AB GOTO 25400,25410,25380,25380
  3393. 25400 WILL.SUBDIRS.B.USED$ = "NO"
  3394.       UPLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
  3395.       DOWNLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
  3396.       RETURN
  3397. 25410 WILL.SUBDIRS.B.USED$ = "YES"
  3398.       RETURN
  3399. '
  3400. ' *****************************************************************************
  3401. ' * SET UP FOR UPLOADING TO A DOS SUB-DIRECTORY?                              *
  3402. ' *****************************************************************************
  3403. '
  3404. 25420 XX$ = "Are uploads to a DOS sub-directory? (YES or NO) "
  3405.       GOSUB 50345
  3406.       GOSUB 22380
  3407.       ON AB GOTO 25440,25450,25420,25420
  3408. 25440 UPLOAD.TO.SUBDIR$ = "NO"
  3409.       RETURN
  3410. 25450 UPLOAD.TO.SUBDIR$ = "YES"
  3411.       RETURN
  3412. '
  3413. ' *****************************************************************************
  3414. ' * SHOULD RBBS-PC SET UP TO HAVE DOWNLOADS COME FROM DOS SUB-DIRECTORIES     *
  3415. ' *****************************************************************************
  3416. '
  3417. 25460 XX$ = "Are downloads from DOS sub-directories? (YES or NO) "
  3418.       GOSUB 50345
  3419.       GOSUB 22380
  3420.       ON AB GOTO 25480,25490,25460,25460
  3421. 25480 DOWNLOAD.TO.SUBDIR$ = "NO"
  3422.       RETURN
  3423. 25490 DOWNLOAD.TO.SUBDIR$ = "YES"
  3424.       RETURN
  3425. '
  3426. ' *****************************************************************************
  3427. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF   *
  3428. ' *****************************************************************************
  3429. '
  3430. 25495 IF UPLOAD.TO.SUBDIR$ = "NO" THEN _
  3431.          GOTO 25497
  3432.       GOSUB 31060
  3433.       A$ = "upload"
  3434.       PRINT "Change " + A$ +" DOS sub-directory? (YES or NO) ";
  3435.       GOSUB 22380
  3436.       ON AB GOTO 25497,25500,25495,25495
  3437. 25497 IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  3438.          RETURN
  3439.       GOSUB 31060
  3440.       A$ = "download"
  3441.       PRINT "Modify " + A$ + _
  3442.             " DOS sub-directories? (YES or NO) ";
  3443.       GOSUB 22380
  3444.       ON AB GOTO 25498,25505,25497,25497
  3445. 25498 RETURN
  3446. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3447.          GOTO 25502
  3448. 25501 LOCATE 23,5
  3449.       PRINT SPC(74)
  3450.       LOCATE 23,5
  3451.       PRINT "Current " + A$" DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3452. 25502 GOSUB 25850
  3453.       IF LEN(HJ$) < 1 THEN _
  3454.          GOTO 25505
  3455.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3456.          SWAP UPLOAD.SUBDIR$,X$ : _
  3457.          IF X$ = "" THEN _
  3458.             GOTO 25501 _
  3459.          ELSE 25505
  3460.       GOTO 25502
  3461. 25505 IF A$="upload" THEN _
  3462.          GOTO 25497
  3463.       IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  3464.          RETURN
  3465.       LOCATE 23,5
  3466.       PRINT SPC(74)
  3467.       LOCATE 23,5
  3468.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3469. 25510 GOSUB 31060
  3470.       PRINT "L>ist, C>hange, A>dd, D>elete " + A$" DOS sub-directories? (CR ends) ";
  3471.       LINE INPUT;HJ$:
  3472.       GOSUB 50654
  3473.       IF LEN(HJ$) <  1 GOTO 25498
  3474.       IF LEN(HJ$) <> 1 GOTO 25505
  3475.       FF = INSTR("LCAD",HJ$)
  3476.       IF FF = 0 THEN _
  3477.          GOTO 25510
  3478.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3479.          GOTO 25510
  3480.       ON FF GOSUB 25610,25670,25730,25670
  3481.       GOTO 25505
  3482. 25610 LAST = (DNLD.SUB/16) + 1
  3483.       INCR = 1
  3484.       FOR IX = 1 TO LAST
  3485.       GOSUB 24800
  3486.       LOCATE 4,1
  3487.       PRINT "DOS sub-directories from which downloads are done:";
  3488.       INDEX = 4
  3489.       FOR I = 1 TO 16
  3490.       LOCATE INDEX + I,1
  3491.       PRINT DNLD$(INCR);
  3492.       INCR = INCR + 1
  3493.       IF INCR > DNLD.SUB GOTO 25668
  3494.       NEXT
  3495. 25636 XX$ = "More (YES or NO)"
  3496.       GOSUB 50345
  3497.       GOSUB 22380
  3498.       ON AB GOTO 25668,25644,25636,25636
  3499. 25644 NEXT
  3500. 25668 RETURN
  3501. 25670 GOSUB 25850
  3502.       IF LEN(HJ$) < 1 THEN _
  3503.          RETURN
  3504.       GOSUB 26030
  3505.       A$ = " not found!"
  3506.       IF X$ = "" THEN _
  3507.          GOTO 25682
  3508.       FOR I = 1 TO DNLD.SUB
  3509.           IF X$ = DNLD$(I) THEN _
  3510.              GOTO 25698
  3511.       NEXT
  3512. 25682 GOSUB 31060
  3513.       PRINT X$ + A$;
  3514.       A$ = "download"
  3515.       DELAY! = FNTI! + 5
  3516.       GOSUB 60440
  3517.       RETURN
  3518. 25698 IF FF = 4 THEN _
  3519.          FOR X = I TO DNLD.SUB : _
  3520.              DNLD$(X) = DNLD$(X + 1) : _
  3521.          NEXT : _
  3522.          A$ = " deleted!" : _
  3523.          DNLD.SUB = DNLD.SUB-1 : _
  3524.          GOTO 25682
  3525.       IF FF = 2 THEN _
  3526.          A$ = "download" : _
  3527.          NEXT.MESSAGE.RECORD = I : _
  3528.          GOSUB 25850 : _
  3529.          GOSUB 26030 : _
  3530.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3531.          A$ = " changed!" : _
  3532.          GOTO 25682
  3533. 25730 X$ = ""
  3534.       GOSUB 25850
  3535.       IF LEN(HJ$) < 1 THEN _
  3536.          RETURN
  3537.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3538.           IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3539.              GOTO 25735
  3540.       NEXT
  3541.       GOSUB 60380
  3542.       GOSUB 31060
  3543.       PRINT X$ + " is not on a drive eligible for downloading.";
  3544.       DELAY! = FNTI! + 5
  3545.       GOSUB 60440
  3546.       GOTO 25730
  3547. 25735 IF X$ = "" THEN _
  3548.          GOTO 25498
  3549.       DNLD.SUB = DNLD.SUB + 1
  3550.       DNLD$(DNLD.SUB) = X$
  3551.       RETURN
  3552. '
  3553. ' *****************************************************************************
  3554. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY                   *
  3555. ' *****************************************************************************
  3556. '
  3557. 25850 GOSUB 31060
  3558.       PRINT "Enter " + A$" DOS sub-directory name (CR to end). ";
  3559.       LINE INPUT;HJ$
  3560.       GOSUB 50654
  3561.       IF LEN(HJ$) < 1 THEN _
  3562.          RETURN
  3563.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3564.          X$ = HJ$ : _
  3565.          RETURN
  3566.       IF INSTR(HJ$,":\") <> 2 THEN _
  3567.          GOTO 25850
  3568.       X$ = HJ$
  3569.       FOR I = 4 TO LEN(X$)
  3570.         Y = INSTR(I,X$,"\")
  3571.         IF Y = 0 THEN _
  3572.            L1 = LEN(X$)-I + 1 : _
  3573.            GOTO 25876
  3574.         IF Y<>0 THEN _
  3575.            L1 = Y-I + 1 : _
  3576.            GOTO 25876
  3577.       NEXT
  3578. 25876 HJ$ = MID$(X$,I,L1)
  3579.       IF LEN(HJ$) > 12 THEN _
  3580.          GOTO 25850
  3581.       L1 = INSTR(HJ$,".")
  3582.       IF L1 = 0 THEN _
  3583.          IF LEN(HJ$) < 9 THEN _
  3584.             GOTO 25920 _
  3585.          ELSE GOTO 25850
  3586.       IF L1 > 9 THEN _
  3587.          GOTO 25850
  3588.       IF L1 < 2 THEN _
  3589.          GOTO 25850
  3590.       IF LEN(HJ$)-L1 > 3 THEN _
  3591.          GOTO 25850
  3592.       I = 0
  3593.       GOSUB 25920
  3594.       IF I = 0 THEN _
  3595.          RETURN
  3596.       GOTO 25850
  3597. 25920 FOR J = 1 TO LEN(HJ$)
  3598.         X = ASC(MID$(HJ$,J,1))
  3599.         IF (X > 63 AND X < 91) THEN _
  3600.            GOTO 26020
  3601.         IF (X > 47 AND X < 58) THEN _
  3602.            GOTO 26020
  3603.         IF (X = 33) THEN _
  3604.            GOTO 26020
  3605.         IF (X > 34 AND X < 42) THEN _
  3606.            GOTO 26020
  3607.         IF (X > 43 AND X < 47) THEN _
  3608.            GOTO 26020
  3609.         IF (X > 96 AND X < 124) THEN _
  3610.            GOTO 26020
  3611.         IF (X = 125) THEN _
  3612.            GOTO 26020
  3613.         I = 1
  3614.         RETURN
  3615. 26020 NEXT
  3616.       RETURN
  3617. '
  3618. ' *****************************************************************************
  3619. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING                *
  3620. ' *****************************************************************************
  3621. '
  3622. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3623.         IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3624.            RETURN
  3625.       NEXT
  3626.       X$ = ""
  3627.       RETURN
  3628. '
  3629. ' *****************************************************************************
  3630. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS  *
  3631. ' *****************************************************************************
  3632. '
  3633. 26040 XX$ = "Is RBBS-PC to drop to DOS at a specific time each day? (YES or NO)"
  3634.       GOSUB 50345
  3635.       GOSUB 22380
  3636.       ON AB GOTO 26050,26060,26050,26060
  3637. 26050 HJ$ = ""                                                       ' CPC15-1B
  3638.       GOTO 26065                                                     ' CPC15-1B
  3639. 26060 XX$ = "Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No) "
  3640.       GOSUB 50345
  3641.       LINE INPUT;HJ$
  3642. 26065 IF HJ$ = "" THEN _                                             ' CPC15-1B
  3643.          TIME.TO.DROP.TO.DOS = -1 : _
  3644.          RETURN
  3645.       IF LEN(HJ$) <> 4 THEN _
  3646.          GOTO 26060
  3647.       IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
  3648.          FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
  3649.          FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
  3650.          FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
  3651.          GOTO 26040
  3652.       TIME.TO.DROP.TO.DOS = VAL(HJ$)
  3653.       RETURN
  3654. '
  3655. ' *****************************************************************************
  3656. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN                *
  3657. ' *****************************************************************************
  3658. '
  3659. 26070 CLS                                                            ' CPC15-1B
  3660.       LOCATE 3,5                                                     ' CPC15-1B
  3661.       PRINT "RBBS-PC supports the following store-and-forward mail systems:" ' CPC15-1B
  3662.       LOCATE 5,20                                                    ' CPC15-1B
  3663.       PRINT "Environment"                                            ' CPC15-1B
  3664.       LOCATE 7,10                                                    ' CPC15-1B
  3665.       PRINT "0. None"                                                ' CPC15-1B
  3666.       LOCATE 9,10                                                    ' CPC15-1B
  3667.       PRINT "1. SeaDog"                                              ' CPC15-1B
  3668.       LOCATE 11,10                                                   ' CPC15-1B
  3669.       PRINT "2. X.400 (to be supported in the future)"               ' CPC15-1B
  3670.       LOCATE 13,10                                                   ' CPC15-1B
  3671.       PRINT "3. GTE's PC-Pursuit (to be supported in the future)"    ' CPC15-1B
  3672.       LOCATE 15,10                                                   ' CPC15-1B
  3673.       PRINT "4. G.E.'s GENIE's QuikComm (to be supported in the future)" ' CPC15-1B
  3674. 26080 GOSUB 50340                                                    ' CPC15-1B
  3675.       XX$ = "Select network mail type (0 to 4, CR to end)"           ' CPC15-1B
  3676.       GOSUB 50345                                                    ' CPC15-1B
  3677.       LINE INPUT;X$                                                  ' CPC15-1B
  3678.       IF X$ = "" THEN _                                              ' CPC15-1B
  3679.          NET.MAIL$ = "NONE" : _                                      ' CPC15-1B
  3680.          RETURN                                                      ' CPC15-1B
  3681.       IF VAL(X$) < 0 OR VAL(X$) > 1 THEN _                           ' CPC15-1B
  3682.          GOTO 26070                                                  ' CPC15-1B
  3683.       IF VAL(X$) = 0 THEN _                                          ' CPC15-1B
  3684.          NET.MAIL$ = "NONE"                                          ' CPC15-1B
  3685.       IF VAL(X$) = 1 THEN _                                          ' CPC15-1B
  3686.          NET.MAIL$ = "SeaDog"                                        ' CPC15-1B
  3687.       RETURN                                                         ' CPC15-1B
  3688. '
  3689. ' *****************************************************************************
  3690. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)                          *
  3691. ' *****************************************************************************
  3692. '
  3693. 30000 OKAY = 0                      ' <---- check to see if file exists
  3694. 30010 NAME FILE$ AS FILE$           '   OKAY = 0 means file not found
  3695. 30020 OKAY = -1                     '   OKAY = 1 means file exists
  3696. 30030 RETURN
  3697. '
  3698. ' *****************************************************************************
  3699. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD           *
  3700. ' *****************************************************************************
  3701. '
  3702. 30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128        ' <---- read MESSAGES checkpoint record
  3703.       FIELD 2,128 AS RR$
  3704.       GET 2,1
  3705.       CALLS.TODATE!          = VAL(MID$(RR$,1,8))     '  1-  8  =  number of last message on system
  3706.       FIRST.USER.RECORD      = VAL(MID$(RR$,52,5))    ' 52- 56  =  first rec. of user file
  3707.       CURRENT.USER.COUNT     = VAL(MID$(RR$,57,5))    ' 57- 61  =  next avail. user record
  3708.       HIGHEST.USER.RECORD    = VAL(MID$(RR$,62,5))    ' 62- 66  =  last rec. of user file
  3709.       FIRST.MESSAGE.RECORD   = VAL(MID$(RR$,68,7))    ' 68- 74 = first rec. of msgs file
  3710.       NEXT.MESSAGE.RECORD    = VAL(MID$(RR$,75,7))    ' 75- 81 = next avail. msgs record
  3711.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))    ' 82- 88 = last rec. of msgs file
  3712.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))    ' 89- 95 = maximum number of messages
  3713.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2))   '127-128 = maximum number of "nodes"
  3714.       CLOSE 2
  3715.       RETURN
  3716. '
  3717. ' *****************************************************************************
  3718. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE                                *
  3719. ' *****************************************************************************
  3720. '
  3721. 30180 OPEN "R",2,FILE$,128      ' <---- get length of file
  3722.       FIELD 2,128 AS RR$
  3723.       UG = LOF(2)/128
  3724.       CLOSE 2
  3725.       RETURN
  3726. '
  3727. ' *****************************************************************************
  3728. ' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE                           *
  3729. ' *****************************************************************************
  3730. '
  3731. 30230 OPEN "R",2,MAIN.MESSAGE.FILE$            ' <---- create new MESSAGES file
  3732.       FIELD 2,128 AS RR$
  3733.       A$ = "Creating preformatted"
  3734.       LSET RR$ = " 1" + SPACE$(124) + STR$(MAXIMUM.NUMBER.OF.NODES)
  3735.       PUT 2,1                   ' write out blank checkpoint record
  3736.       FOR J = 2 TO FIRST.MESSAGE.RECORD-1
  3737.         GOSUB 31050
  3738.         PUT 2                   ' write out "door" records of new file
  3739.         GOSUB 25030
  3740.       NEXT
  3741.       FOR J = FIRST.MESSAGE.RECORD TO HIGHEST.MESSAGE.RECORD
  3742.         LSET RR$  =  SPACE$(128)
  3743.         PUT 2                   ' write out messages records of new file
  3744.         GOSUB 25030
  3745.       NEXT
  3746.       HIGHEST.MESSAGE.RECORD = LOC(2)                 ' point to last available message record
  3747.       CLOSE 2
  3748.       GOSUB 30450
  3749.       RETURN
  3750. '
  3751. ' *****************************************************************************
  3752. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD             *
  3753. ' *****************************************************************************
  3754. '
  3755. 30450 CLOSE 2
  3756.       OPEN "R",2,MAIN.MESSAGE.FILE$            ' <---- update MESSAGES checkpoint record
  3757.       FIELD 2,128 AS RR$
  3758.       GET 2,1
  3759.       MID$(RR$,52,46) = SPACE$(46)   'reset all counters before filling
  3760.       MID$(RR$,52,5) = STR$(FIRST.USER.RECORD)   ' 52- 56 = first rec. of msgs file
  3761.       MID$(RR$,57,5) = STR$(CURRENT.USER.COUNT)   ' 57- 61 = next avail. user record
  3762.       MID$(RR$,62,5) = STR$(HIGHEST.USER.RECORD)   ' 62- 66 = last rec. of user file
  3763.       MID$(RR$,68,7) = STR$(FIRST.MESSAGE.RECORD)   ' 68- 74 = first rec. of msgs file
  3764.       MID$(RR$,75,7) = STR$(NEXT.MESSAGE.RECORD)   ' 75- 81 = next avail. msgs record
  3765.       MID$(RR$,82,7) = STR$(HIGHEST.MESSAGE.RECORD)   ' 82- 88 = last rec. of msgs file
  3766.       MID$(RR$,89,7) = STR$(MAXIMUM.NUMBER.OF.MSGS)   ' 89- 95 = maximum number of messages
  3767.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3768.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3769.          HJ$=MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3770.       MID$(RR$,127,2) = HJ$       '127-128 = maximum number of "nodes"
  3771.       PUT 2,1
  3772.       CLOSE 2
  3773.       RETURN
  3774. '
  3775. ' *****************************************************************************
  3776. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE                         *
  3777. ' *****************************************************************************
  3778. '
  3779. 30610 CLOSE 1
  3780.       CLOSE 2
  3781.       OPEN "R",1,MAIN.MESSAGE.FILE$,128        ' <---- adjust size of the MESSAGES file
  3782.       FIELD 1,128 AS MESSAGE.RECORD$         ' Open old MESSAGES file
  3783.       A$ = MAIN.MESSAGE.FILE$
  3784.       GOSUB 50095
  3785.       OPEN "R",2,A$,128         ' Open new MESSAGES file
  3786.       FIELD 2,128 AS RR$
  3787.       A$="Copying"
  3788.       OE = B1
  3789.       IF MAXIMUM.NUMBER.OF.NODES<=B1 THEN _
  3790.          OE = MAXIMUM.NUMBER.OF.NODES
  3791.       GOSUB 50340
  3792.       FOR J=1 TO OE + 1
  3793.         GET 1,J
  3794.         LSET RR$ = MESSAGE.RECORD$              ' write out existing checkpoint and
  3795.         PUT 2                    ' existing "door" records
  3796.         GOSUB 25030
  3797.       NEXT
  3798.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3799.          GOTO 30780
  3800.       FOR J  =  OE + 1 TO B1
  3801.         GOSUB 31050
  3802.         PUT 2                    ' write out expansion "door" records
  3803.         GOSUB 25030
  3804.       NEXT
  3805. 30780 MAXIMUM.NUMBER.OF.NODES=B1                      ' set value for maximum number of nodes
  3806.       FOR J = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
  3807. 30830   GET 1,J
  3808.         IF PURGE <> -1 THEN _
  3809.            GOTO 30840
  3810.         IF MID$(MESSAGE.RECORD$,116,1)=CHR$(225) THEN _
  3811.            PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3812.            GOTO 30840
  3813.         IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3814.            PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3815.            J=LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,6)) : _
  3816.            GOTO 30830
  3817. 30840   LSET RR$ = MESSAGE.RECORD$
  3818.         PUT 2                    ' write out existing message records
  3819.         GOSUB 25030
  3820.       NEXT
  3821.       B1=LOC(2) + 1                ' get new file's next message record
  3822.       CLOSE 1
  3823.       IF B3! < LOC(2) + 1 THEN _
  3824.          GOTO 30960
  3825.       IF PURGE THEN _
  3826.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3827.          PURGE = 0 : _
  3828.          A$ = "Preformatting"
  3829.       GOSUB 25030
  3830.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3831.         LSET RR$  =  SPACE$(128)
  3832.         PUT 2                    ' write out expansion message records
  3833.         LOCATE 24,X
  3834.         PRINT LOC(2);
  3835.       NEXT
  3836. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3837.       NEXT.MESSAGE.RECORD = B1
  3838.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3839.       CLOSE 2
  3840. 30980 XX$ = "Delete the old " + MAIN.MESSAGE.FILE$ + " file? (YES or NO)?"
  3841.       GOSUB 50345
  3842.       GOSUB 22380
  3843.       ON AB GOTO 31000,31020,30980,30980
  3844. 31000 A$ = MAIN.MESSAGE.FILE$
  3845.       GOSUB 50096
  3846.       NAME MAIN.MESSAGE.FILE$ AS A$
  3847.       GOTO 31030
  3848. 31020 KILL MAIN.MESSAGE.FILE$
  3849. 31030 A$ = MAIN.MESSAGE.FILE$
  3850.       GOSUB 50095
  3851.       NAME A$ AS MAIN.MESSAGE.FILE$
  3852.       GOSUB 30450
  3853. 31035 RETURN
  3854. '
  3855. ' *****************************************************************************
  3856. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE     *
  3857. ' *****************************************************************************
  3858. '
  3859. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3860.       RETURN
  3861. '
  3862. ' *****************************************************************************
  3863. ' * COMMON SUBROUTINE TO POSITION CURSOR ON LINE 24, COLUMN 5                 *
  3864. ' *****************************************************************************
  3865. '
  3866. 31060 GOSUB 50340
  3867.       LOCATE 24,5
  3868.       RETURN
  3869. '
  3870. ' *****************************************************************************
  3871. ' * COMMON SUBROUTINE TO DISPLAY A LINE ON THE USER'S TERMINAL                *
  3872. ' *****************************************************************************
  3873. '
  3874. 31070 IROW = IROW + 1
  3875.       LOCATE IROW,ICOL
  3876.       PRINT XYZ$;
  3877.       RETURN
  3878. '
  3879. ' *****************************************************************************
  3880. ' * ROUTINE TO CREATE A NEW USERS FILE                                        *
  3881. ' *****************************************************************************
  3882. '
  3883. 50000 OPEN "R",2,MAIN.USER.FILE$            ' <---- create a new USERS file
  3884.       FIELD 2,128 AS U$
  3885.       GOSUB 50340
  3886.       A$ = "creating preformatted"
  3887.       GOSUB 25020
  3888.       FOR J = FIRST.USER.RECORD TO HIGHEST.USER.RECORD
  3889.         LSET U$  =  SPACE$(128)
  3890.         PUT 2
  3891.         LOCATE 24,X
  3892.         PRINT J;
  3893.       NEXT
  3894.       CLOSE 2
  3895.       RETURN
  3896. '
  3897. ' *****************************************************************************
  3898. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION     *
  3899. ' *****************************************************************************
  3900. '
  3901. 50095 IF INSTR(A$,".") THEN _
  3902.          A$ = MID$(A$,1,INSTR(A$,".")-1) + ".BAK" : _
  3903.          RETURN _
  3904.       ELSE A$ = A$ + ".BAK" : _
  3905.       RETURN
  3906. '
  3907. ' *****************************************************************************
  3908. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION   *
  3909. ' *****************************************************************************
  3910. '
  3911. 50096 IF INSTR(A$,".") THEN _
  3912.          A$ = MID$(A$,1,INSTR(A$,".")-1) + ".OLD" : _
  3913.          RETURN _
  3914.       ELSE A$ = A$ + ".OLD" : _
  3915.       RETURN
  3916. '
  3917. ' *****************************************************************************
  3918. ' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE                           *
  3919. ' *****************************************************************************
  3920. '
  3921.       OPEN "R",2,MAIN.MESSAGE.FILE$
  3922.       FIELD 2,128 AS RR$
  3923.       IF F = 1 THEN _
  3924.          CALLS.TODATE! = 1
  3925.       GOSUB 50340
  3926.       LSET RR$ = " 1      " + SPACE$(118) + STR$(MAXIMUM.NUMBER.OF.NODES)
  3927.       PUT 2,1                       ' write out first record of new file
  3928.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  3929.         GOSUB 31050
  3930.         PUT 2                       ' write out "door" records of new file
  3931.         GOSUB 25030
  3932.       NEXT
  3933.       FIRST.MESSAGE.RECORD = LOC(2) + 1      ' point to first message record
  3934.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD   ' point to next available message record
  3935.       IF MAXIMUM.NUMBER.OF.NODES + 1 = MAX.MSG.FILE.SIZE.FRM.DEF! THEN _
  3936.          GOTO 50270
  3937.       FOR J! = MAXIMUM.NUMBER.OF.NODES + 2 TO MAX.MSG.FILE.SIZE.FRM.DEF!
  3938.         LSET RR$  =  SPACE$(128)
  3939.         PUT 2                          ' write out messages records of new file
  3940.         GOSUB 25030
  3941.       NEXT
  3942. 50270 HIGHEST.MESSAGE.RECORD = LOC(2)                  ' point to last available message record
  3943.       GOSUB 30040
  3944.       RETURN
  3945. '
  3946. ' *****************************************************************************
  3947. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24            *
  3948. ' *****************************************************************************
  3949. '
  3950. 50340 I! = FRE(C$)
  3951.       LOCATE 24,1
  3952.       PRINT STRING$(79,32);
  3953.       RETURN
  3954. '
  3955. ' *****************************************************************************
  3956. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24                         *
  3957. ' *****************************************************************************
  3958. '
  3959. 50345 GOSUB 50340
  3960. 50346 LOCATE 24,5
  3961.       PRINT XX$;
  3962.       RETURN
  3963. 50350 F$ = MAIN.USER.FILE$
  3964.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3965.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".")-1)
  3966.       RETURN
  3967. '
  3968. ' *****************************************************************************
  3969. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE                         *
  3970. ' *****************************************************************************
  3971. '
  3972. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3973. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3974. 50500 OPEN "R",1,MAIN.USER.FILE$
  3975.       IF MAX.USR.FILE.SIZE.FRM.DEF < LOF(1)/128 THEN _
  3976.          MAX.USR.FILE.SIZE.FRM.DEF = LOF(1)/128
  3977.       UG = LOF(1)/128
  3978.       CLOSE 1
  3979.       RETURN
  3980. '
  3981. ' *****************************************************************************
  3982. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE                      *
  3983. ' *****************************************************************************
  3984. '
  3985. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5*MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3986. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3987. 50550 OPEN "R",1,MAIN.MESSAGE.FILE$
  3988.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1)/128 THEN _
  3989.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1)/128
  3990.       CLOSE 1
  3991.       RETURN
  3992. '
  3993. ' *****************************************************************************
  3994. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS    *
  3995. ' *****************************************************************************
  3996. '
  3997. 50580 OLD = LOC(1)
  3998.       GET 1,I + 1
  3999.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  4000.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  4001.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  4002.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  4003.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  4004.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  4005.          RETURN
  4006.       PRINT "Message chain broken at record number " + STR$(OLD)
  4007.       PRINT "Message chain repair in progress!
  4008.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD-1
  4009.         GET 1,IQ
  4010.         IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  4011.          OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  4012.          AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  4013.          AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  4014.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  4015.          AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  4016.          GOTO 50660
  4017.       NEXT
  4018.       GOTO 23730
  4019. '
  4020. ' *****************************************************************************
  4021. ' * COMMON ROUTINE TO CONVERT FROM LOWER TO UPPER CASE                        *
  4022. ' *****************************************************************************
  4023. '
  4024. 50654 ' Convert Lower Case to Upper Case -------
  4025.       FOR Z = 1 TO LEN(HJ$)
  4026.         MID$(HJ$,Z,1) = CHR$(ASC(MID$(HJ$,Z,1)) + 32*(ASC(MID$(HJ$,Z,1))>96))
  4027.         NEXT
  4028.       RETURN
  4029. '
  4030. ' *****************************************************************************
  4031. ' * COMMON SUBROUTINE TO SKIP TO THE NEXT GOOD MESSAGE HEADER IF CHAIN BORKEN *
  4032. ' *****************************************************************************
  4033. '
  4034. 50660 GET 1,OLD
  4035.       MID$(MESSAGE.RECORD$,117,6) = STR$(IQ-OLD)
  4036.       PUT 1,OLD
  4037.       PRINT "Message chain repaired.
  4038.       I = IQ
  4039.       RETURN
  4040. '
  4041. ' *****************************************************************************
  4042. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD # *
  4043. ' *****************************************************************************
  4044. '
  4045. 50720 JX = LEN.HASH
  4046.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  4047.         JX = JX-1
  4048.       WEND
  4049.       X$ = MID$(HASH.VALUE$,1,JX)
  4050.       UIX# = FNHSH(X$)
  4051.       Q = FNHSH2(X$)
  4052.       NSR = 1
  4053.       RO = CSRLIN
  4054.       CO = POS(0)
  4055. 50722 GET 2,UIX#
  4056.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  4057.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  4058.          GOTO 50730
  4059.       UIX# = UIX# + Q
  4060.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  4061.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  4062.       NSR = NSR + 1
  4063.       LOCATE RO,CO
  4064.       PRINT "searching";UIX#;
  4065.       GOTO 50722
  4066. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  4067.        PUT 2,UIX#
  4068.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  4069.       LOCATE RO,CO
  4070.       PRINT "to pos#";UIX#;" /";NSR;" srch(s)"
  4071.       RETURN
  4072. '
  4073. ' *****************************************************************************
  4074. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE       *
  4075. ' *****************************************************************************
  4076. '
  4077. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  4078.       GOSUB 25020
  4079.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  4080.         LSET USER.RECORD.N$       = TEMPLATE$
  4081.         PUT 2
  4082.         LOCATE 24,X
  4083.         PRINT J;
  4084.       NEXT
  4085.       RETURN
  4086. '
  4087. ' *****************************************************************************
  4088. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES          *
  4089. ' *****************************************************************************
  4090. '
  4091. 59000 GOSUB 50340
  4092.       IF EXPERT.USER$ = "NOVICE" THEN _
  4093.          EXPERT.USER = 0
  4094.       IF EXPERT.USER$ = "EXPERT" THEN _
  4095.          EXPERT.USER = -1
  4096.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  4097.       PROMPT.BELL = -1
  4098.       IF PROMPT.BELL$ = "OFF" THEN _
  4099.          PROMPT.BELL = 0
  4100.       PAGING.PRINTER.SUPPORT$ = ". "
  4101.       IF M11$ = "YES" THEN _
  4102.          PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7)
  4103.       CODE.TYPE = FALSE
  4104.       IF CODE.TYPE$ = "COMPILED" THEN _
  4105.          CODE.TYPE = TRUE
  4106.       GOSUB 15780
  4107.       BULLETINS.OPTIONAL = FALSE
  4108.       IF BULLETINS.OPTIONAL$ = "YES" THEN _
  4109.          BULLETINS.OPTIONAL = TRUE
  4110.       MESSAGE.REMINDER = FALSE
  4111.       IF MESSAGE.REMINDER$ = "YES" THEN _
  4112.          MESSAGE.REMINDER = TRUE
  4113.       REQUIRE.NON.ASCII = FALSE
  4114.       IF REQUIRE.NON.ASCII$ = "YES" THEN _
  4115.          REQUIRE.NON.ASCII = TRUE
  4116.       WELCOME.INTERRUPTABLE = FALSE
  4117.       IF WELCOME.INTERRUPTABLE$ = "YES" THEN _
  4118.          WELCOME.INTERRUPTABLE = TRUE
  4119.       REMIND.FILE.TRANSFERS = FALSE
  4120.       IF REMIND.FILE.TRANSFERS$ = "YES" THEN _
  4121.          REMIND.FILE.TRANSFERS = TRUE
  4122.       REMIND.PROFILE = FALSE
  4123.       IF REMIND.PROFILE$ = "YES" THEN _
  4124.          REMIND.PROFILE = TRUE
  4125.       DOORS.AVAILABLE = FALSE
  4126.       IF DOORS.AVAILABLE$ = "YES" THEN _
  4127.          DOORS.AVAILABLE = TRUE
  4128.       LIMIT.DAILY.TIME = FALSE
  4129.       IF LIMIT.DAILY.TIME$ = "YES" THEN _
  4130.          LIMIT.DAILY.TIME = TRUE
  4131.       COMMANDS.BETWEEN.RINGS = FALSE
  4132.       IF COMMANDS.BETWEEN.RINGS$ = "YES" THEN _
  4133.          COMMANDS.BETWEEN.RINGS = TRUE
  4134.       MNP.SUPPORT = FALSE
  4135.       IF MNP.SUPPORT$ = "YES" THEN _
  4136.          MNP.SUPPORT = TRUE
  4137.       WILL.SUBDIRS.B.USED = FALSE
  4138.       IF WILL.SUBDIRS.B.USED$ = "YES" THEN _
  4139.          WILL.SUBDIRS.B.USED = TRUE
  4140.       UPLOAD.TO.SUBDIR = FALSE
  4141.       IF UPLOAD.TO.SUBDIR$ = "YES" THEN _
  4142.          UPLOAD.TO.SUBDIR = TRUE
  4143.       DOWNLOAD.TO.SUBDIR = FALSE
  4144.       IF DOWNLOAD.TO.SUBDIR$ = "YES" THEN _
  4145.          DOWNLOAD.TO.SUBDIR = TRUE
  4146.       RESTRICT.BAUD = FALSE
  4147.       IF RESTRICT.BAUD$ = "YES" THEN _
  4148.          RESTRICT.BAUD = TRUE
  4149.       IF RESTRICT.BAUD$="YES=Registered users" THEN _
  4150.          RESTRICT.BAUD=-2
  4151.       USE.COLOR = FALSE
  4152.       IF USE.COLOR$ = "YES" THEN _
  4153.          USE.COLOR = TRUE
  4154.       DISKFULL.GO.OFFLINE = FALSE
  4155.       IF DISKFULL.GO.OFFLINE$ = "YES" THEN _
  4156.          DISKFULL.GO.OFFLINE = TRUE
  4157.       EXTENDED.LOGGING = FALSE
  4158.       IF EXTENDED.LOGGING$ = "YES" THEN _
  4159.          EXTENDED.LOGGING = TRUE
  4160.       DUMB.MODEM = FALSE
  4161.       IF DUMB.MODEM$ = "YES" THEN _
  4162.          DUMB.MODEM = TRUE
  4163.       COMMENTS.AS.MESSAGES=FALSE
  4164.       IF COMMENTS.AS.MESSAGES$="YES" THEN _
  4165.          COMMENTS.AS.MESSAGES=TRUE
  4166.       TURBO.RBBS = FNYESNO(TURBO.RBBS$)
  4167.       LIMIT.SEARCH.TO.FMS = FNYESNO(LIMIT.SEARCH.TO.FMS$)
  4168.       NEW.FILES.CHECK = FNYESNO(NEW.FILES.CHECK$)
  4169.       SHOW.SECTION = FNYESNO(SHOW.SECTION$)
  4170.       COMMANDS.IN.PROMPT = FNYESNO(COMMANDS.IN.PROMPT$)
  4171.       NEWUSER.SETS.DEFAULTS = FNYESNO(NEWUSER.SETS.DEFAULTS$)
  4172.       REMEMBER.NEW.USERS = FNYESNO(REMEMBER.NEW.USERS$)
  4173.       SURVIVE.NOUSER.ROOM = FNYESNO(SURVIVE.NOUSER.ROOM$)
  4174.       TURN.PRINTER.OFF = FNYESNO(TURN.PRINTER.OFF$)
  4175.       MUSIC = FNYESNO(MUSIC$)
  4176.       RESTRICT.BY.DATE = FNYESNO (RESTRICT.BY.DATE$)
  4177.       REDIRECT.IO.METHOD = FNYESNO(REDIRECT.IO.METHOD$)
  4178.       GO.TO.SHELL = TRUE
  4179.       IF GO.TO.SHELL$ = "EXIT RBBS-PC" THEN _                        ' CPC15-1B
  4180.          GO.TO.SHELL = FALSE
  4181.       IF REQUIRED.QUESTIONNAIRE$ = "NONE" THEN _
  4182.          REQUIRED.QUESTIONNAIRE$ = ""
  4183.       MLCOM = FNYESNO(MLCOM$)
  4184.       SHOOT.YOURSELF = FNYESNO(SHOOT.YOURSELF$)
  4185.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  4186.          MAIN.MESSAGE.FILE$ = MAINMSG$
  4187.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  4188.          MAIN.USER.FILE$ = MAINUSR$
  4189.       IF F THEN _
  4190.          GOSUB 30040
  4191. 59020 OPEN "O",#1,CONFIG.FILENAME$
  4192.       IF INSTR(MO$,":") < 1 THEN _
  4193.          MO$ = MO$ + ":
  4194.       IF INSTR(SJ$,":") < 1 THEN _
  4195.          SJ$ = SJ$ + ":
  4196.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  4197.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":
  4198.       T$ = DIRECTORY.EXTENTION$
  4199.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  4200.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  4201.       S$ = UPLOAD.DIRECTORY$
  4202.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  4203.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".")-1)
  4204.       DIRECTORY.EXTENTION$ = T$
  4205.       UPLOAD.DIRECTORY$ = S$
  4206.       IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
  4207.          DNLD.SUB = 0 : _
  4208.          FOR I = 1 TO 99 : _
  4209.             DNLD$(I) = "" : _
  4210.          NEXT
  4211.       IF UPLOAD.TO.SUBDIR$   = "NO" THEN _
  4212.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + ":"
  4213.       IF UPLOAD.TO.SUBDIR$   = "YES" AND UPLOAD.SUBDIR$<>"" THEN _
  4214.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  4215.       IF REQUIRED.RINGS = 0 AND _
  4216.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,5)<>"1Q0X1" THEN _ ' CPC15-1B
  4217.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,5)="1Q0X1" ' CPC15-1B
  4218.       IF REQUIRED.RINGS > 0 AND _
  4219.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="0Q0X1" THEN _ ' CPC15-1B
  4220.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="254  " ' CPC15-1B
  4221. '
  4222. ' *****************************************************************************
  4223. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION *
  4224. ' *****************************************************************************
  4225. '
  4226. 59030 WRITE #1,DOWNLOAD.DRIVES$, _
  4227.                SYSOP.PASSWORD.1$, _
  4228.                SYSOP.PASSWORD.2$, _
  4229.                SYSOP.FIRST.NAME$, _
  4230.                SYSOP.LAST.NAME$, _
  4231.                REQUIRED.RINGS, _
  4232.                START.OFFICE.HOURS, _
  4233.                END.OFFICE.HOURS, _
  4234.                MINUTES.PER.SESSION!, _
  4235.                MAX.ALLOWED.MSGS.FRM.DEF, _
  4236.                ACT.MNTHS.B4.DELETING, _
  4237.                UPLOAD.DIRECTORY$,_
  4238.                EXPERT.USER, _
  4239.                ACTIVE.BULLETINS, _
  4240.                PROMPT.BELL, _
  4241.                PCJR, _
  4242.                CODE.TYPE, _
  4243.                MENU$(1), _
  4244.                MENU$(2), _
  4245.                MENU$(3), _
  4246.                MENU$(4), _
  4247.                MENU$(5), _
  4248.                CONFERENCE.MENU$, _
  4249.                CONFERENCE.VIEWER.SEC.LVL, _
  4250.                WELCOME.INTERRUPTABLE, _
  4251.                REMIND.FILE.TRANSFERS, _
  4252.                PAGE.LENGTH, _
  4253.                MAX.MESSAGE.LINES, _
  4254.                DOORS.AVAILABLE, _
  4255.                MO$
  4256.       IF INSTR(BULLETIN.MENU$,":")   < 1 THEN _
  4257.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  4258.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  4259.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + BULLETIN.PREFIX$
  4260.       GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  4261.       FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  4262.       WRITE #1,MAIN.MESSAGE.FILE$, _
  4263.                MAIN.MESSAGE.BACKUP$, _
  4264.                CALLERS.FILE$, _
  4265.                COMMENTS.FILE$, _
  4266.                MAIN.USER.FILE$, _
  4267.                WELCOME.FILE$, _
  4268.                NEWUSER.FILE$, _
  4269.                DIRECTORY.EXTENTION$, _
  4270.                COM.PORT$, _
  4271.                BULLETINS.OPTIONAL, _
  4272.                USER.INIT.COMMAND$, _
  4273.                RTS$, _                                               ' CPC15-1B
  4274.                DOS.VERSION, _
  4275.                FG, _
  4276.                BG, _
  4277.                BORDER, _
  4278.                RBBS.BAT$, _
  4279.                RCTTY.BAT$
  4280.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  4281.                DUMMY$, _
  4282.                HELP$(3), _
  4283.                HELP$(4), _
  4284.                HELP$(7), _
  4285.                HELP$(9), _
  4286.                BULLETIN.MENU$, _
  4287.                BULLETIN.PREFIX$, _
  4288.                DRIVE.FOR.BULLETINS$, _
  4289.                MESSAGE.REMINDER, _
  4290.                REQUIRE.NON.ASCII, _
  4291.                DOORS.SECURITY.LEVEL, _
  4292.                MAXIMUM.NUMBER.OF.NODES, _
  4293.                NETWORK.TYPE, _
  4294.                RECYCLE.TO.DOS, _
  4295.                MAX.USR.FILE.SIZE.FRM.DEF, _
  4296.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  4297.                TRASHCAN.FILE$
  4298.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  4299.                DEFAULT.SECURITY.LEVEL, _
  4300.                SYSOP.SECURITY.LEVEL, _
  4301.                FILESEC.FILE$, _
  4302.                SYSOP.MENU.SECURITY.LEVEL, _
  4303.                LOCAL.PASSWORD$, _
  4304.                MAXIMUM.VIOLATIONS, _
  4305.                SYSOP.FUNCTION(1), _
  4306.                SYSOP.FUNCTION(2), _
  4307.                SYSOP.FUNCTION(3), _
  4308.                SYSOP.FUNCTION(4), _
  4309.                SYSOP.FUNCTION(5), _
  4310.                SYSOP.FUNCTION(6), _
  4311.                SYSOP.FUNCTION(7), _
  4312.                PASSWORD.FILE$, _
  4313.                MAXIMUM.PASSWORD.CHANGES, _
  4314.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  4315.                OVERWRITE.SECURITY.LEVEL, _
  4316.                DOORS.TERMINAL.TYPE, _
  4317.                LIMIT.DAILY.TIME
  4318.       WRITE #1,MAIN.FUNCTION(1), _
  4319.                MAIN.FUNCTION(2), _
  4320.                MAIN.FUNCTION(3), _
  4321.                MAIN.FUNCTION(4), _
  4322.                MAIN.FUNCTION(5), _
  4323.                MAIN.FUNCTION(6), _
  4324.                MAIN.FUNCTION(7), _
  4325.                MAIN.FUNCTION(8), _
  4326.                MAIN.FUNCTION(9), _
  4327.                MAIN.FUNCTION(10), _
  4328.                MAIN.FUNCTION(11), _
  4329.                MAIN.FUNCTION(12), _
  4330.                MAIN.FUNCTION(13), _
  4331.                MAIN.FUNCTION(14), _
  4332.                MAIN.FUNCTION(15), _
  4333.                MAIN.FUNCTION(16), _
  4334.                MAIN.FUNCTION(17), _
  4335.                DUMMY$, _
  4336.                WAIT.BEFORE.DISCONNECT
  4337.       WRITE #1,FILES.FUNCTION(1), _
  4338.                FILES.FUNCTION(2), _
  4339.                FILES.FUNCTION(3), _
  4340.                FILES.FUNCTION(4), _
  4341.                FILES.FUNCTION(5), _
  4342.                FILES.FUNCTION(6), _
  4343.                FILES.FUNCTION(7), _
  4344.                UTILITY.FUNCTION(1), _
  4345.                UTILITY.FUNCTION(2), _
  4346.                UTILITY.FUNCTION(3), _
  4347.                UTILITY.FUNCTION(4), _
  4348.                UTILITY.FUNCTION(5), _
  4349.                UTILITY.FUNCTION(6), _
  4350.                UTILITY.FUNCTION(7), _
  4351.                UTILITY.FUNCTION(8), _
  4352.                UTILITY.FUNCTION(9), _
  4353.                UTILITY.FUNCTION(10), _
  4354.                UTILITY.FUNCTION(11), _
  4355.                GLOBAL.FUNCTION(1), _
  4356.                GLOBAL.FUNCTION(2), _
  4357.                GLOBAL.FUNCTION(3), _
  4358.                GLOBAL.FUNCTION(4), _
  4359.                UPLOAD.TIME.FACTOR!, _
  4360.                COMPUTER.TYPE, _
  4361.                REMIND.PROFILE, _
  4362.                RBBS.NAME$, _
  4363.                COMMANDS.BETWEEN.RINGS, _
  4364.                MNP.SUPPORT, _
  4365.                PAGING.PRINTER.SUPPORT$, _
  4366.                MODEM.INIT.BAUD$
  4367. 59035 WRITE #1,TURN.PRINTER.OFF,_
  4368.                DIRECTORY.PATH$,_
  4369.                MIN.SEC.TO.VIEW, _
  4370.                LIMIT.SEARCH.TO.FMS, _
  4371.                DEFAULT.CATEGORY.CODE$, _
  4372.                DIR.CATEGORY.FILE$, _
  4373.                NEW.FILES.CHECK, _
  4374.                MAX.DESC.LEN, _
  4375.                SHOW.SECTION, _
  4376.                COMMANDS.IN.PROMPT, _
  4377.                NEWUSER.SETS.DEFAULTS, _
  4378.                HELP.PATH$, _
  4379.                HELP.EXTENSION$, _
  4380.                MAIN.COMMANDS$, _
  4381.                FILE.COMMANDS$, _
  4382.                UTIL.COMMANDS$, _
  4383.                GLOBAL.COMMANDS$, _
  4384.                SYSOP.COMMANDS$
  4385.       WRITE #1,UPLOAD.PATH$, _
  4386.                FMS.DIRECTORY$, _
  4387.                ANS.MENU$, _
  4388.                REQUIRED.QUESTIONNAIRE$, _
  4389.                REMEMBER.NEW.USERS, _
  4390.                SURVIVE.NOUSER.ROOM, _
  4391.                PROMPT.HASH$, _
  4392.                START.HASH, _
  4393.                LEN.HASH, _
  4394.                PROMPT.INDIV$, _
  4395.                START.INDIV, _
  4396.                LEN.INDIV
  4397.       WRITE #1,BYPASS.MSGS, _
  4398.                MUSIC, _
  4399.                RESTRICT.BY.DATE, _
  4400.                DAYS.TO.WARN, _
  4401.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  4402.                CALLBACK.VERIFICATION, _
  4403.                RESTRICT.VALID.CMDS, _
  4404.                NEW.USER.DEFAULT.MODE, _
  4405.                NEW.USER.LINE.FEEDS, _
  4406.                NEW.USER.NULLS, _
  4407.                NEW.USER.BELL, _
  4408.                NEW.USER.CASE, _
  4409.                NEW.USER.MARGINS, _
  4410.                WRAP.CALLERS.FILE$, _
  4411.                REDIRECT.IO.METHOD, _
  4412.                GO.TO.SHELL, _
  4413.                HALT.ON.ERROR, _
  4414.                NEW.PUBLIC.MSGS.SECURITY, _
  4415.                NEW.PRIVATE.MSGS.SECURITY, _
  4416.                SECURITY.NEEEDED.TO.CHANGE.MSGS, _
  4417.                SL.CATEGORIZE.UPLOADS, _
  4418.                BAUDOT, _
  4419.                TIME.TO.DROP.TO.DOS, _
  4420.                EXPIRED.SECURITY, _
  4421.                DTR.DROP.DELAY, _
  4422.                ASK.IDENTITY, _
  4423.                USE.EXTERNAL.XMODEM, _
  4424.                BUFFER.SIZE, _
  4425.                MLCOM, _
  4426.                SHOOT.YOURSELF, _
  4427.                F7.MESSAGE$, _
  4428.                NEW.USER.DEFAULT.PROTOCOL$, _
  4429.                NEW.USER.GRAPHICS$, _
  4430.                NET.MAIL$, _
  4431.                MASTER.DIRECTORY.NAME$, _
  4432.                PROTOCOL.PATH$, _
  4433.                UPCAT.HELP$, _
  4434.                ALWAYS.STREW.TO$, _
  4435.                DUMMY1$
  4436.       IF COM.PORT$ = "COM1" THEN _
  4437.          LSB = &H3F8 : _
  4438.          MSB = &H3F9 : _
  4439.          LINE.CONTROL.REGISTER = &H3FB : _
  4440.          MODEM.CONTROL.REGISTER = &H3FC : _
  4441.          LINE.STATUS.REGISTER = &H3FD : _
  4442.          MODEM.STATUS.REGISTER = &H3FE
  4443.       IF COM.PORT$ = "COM2" OR PCJR = 1 THEN _
  4444.          LSB = &H2F8 : _
  4445.          MSB = &H2F9 : _
  4446.          LINE.CONTROL.REGISTER = &H2FB : _
  4447.          MODEM.CONTROL.REGISTER = &H2FC : _
  4448.          LINE.STATUS.REGISTER = &H2FD : _
  4449.          MODEM.STATUS.REGISTER = &H2FE
  4450.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  4451.                MODEM.INIT.WAIT.TIME, _
  4452.                MODEM.COMMAND.DELAY.TIME, _
  4453.                TURBO.RBBS, _
  4454.                DNLD.SUB, _
  4455.                WILL.SUBDIRS.B.USED, _
  4456.                UPLOAD.TO.SUBDIR, _
  4457.                DOWNLOAD.TO.SUBDIR, _
  4458.                UPLOAD.SUBDIR$, _
  4459.                RESTRICT.BAUD, _
  4460.                USE.COLOR, _
  4461.                DISKFULL.GO.OFFLINE, _
  4462.                EXTENDED.LOGGING, _
  4463.                USER.RESET.COMMAND$, _
  4464.                USER.COUNT.RINGS.COMMAND$, _
  4465.                USER.ANSWER.COMMAND$, _
  4466.                USER.GO.OFFHOOK.COMMAND$, _
  4467.                DISK.FOR.DOS$, _
  4468.                DUMB.MODEM, _
  4469.                COMMENTS.AS.MESSAGES, _
  4470.                LSB, _
  4471.                MSB, _
  4472.                LINE.CONTROL.REGISTER, _
  4473.                MODEM.CONTROL.REGISTER, _
  4474.                LINE.STATUS.REGISTER, _
  4475.                MODEM.STATUS.REGISTER
  4476.       IF DNLD.SUB<1 OR DNLD.SUB>99 THEN _
  4477.          GOTO 59080
  4478.       FOR I = 1 TO DNLD.SUB
  4479.          WRITE #1,DNLD$(I)
  4480.       NEXT
  4481. 59080 CLOSE #1
  4482. '
  4483. ' *****************************************************************************
  4484. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN *
  4485. ' *****************************************************************************
  4486. '
  4487.       CLS
  4488.       LOCATE 12,1,1
  4489.       PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
  4490.       GOSUB 60380
  4491.       GOTO 60340
  4492. '
  4493. ' *****************************************************************************
  4494. ' *  CONFIG.BAS'S ERROR ROUTINES                                              *
  4495. ' *****************************************************************************
  4496. '
  4497.       REM
  4498. 60010 REM * HANDLE ERROR CONDITIONS *
  4499.       ' PRINT ERR,ERL : STOP
  4500.       IF ERR = 53 AND ERL = 30010 THEN _
  4501.          RESUME 30030
  4502.       IF ERR = 58 AND ERL = 30010 THEN _
  4503.          RESUME 30020
  4504.       IF ERR = 62 AND _
  4505.         (ERL = 11600 OR _
  4506.          ERL = 11620 OR _
  4507.          ERL = 11640 OR _
  4508.          ERL = 11660 OR _
  4509.          ERL = 11680 OR _
  4510.          ERL = 11700 OR _
  4511.          ERL = 11705 OR _
  4512.          ERL = 11706) THEN _
  4513.          PRINT CONFIG.FILENAME$ + _
  4514.                " from a version earlier than CPC15.1 on default drive." : _
  4515.          PRINT "Please delete and rerun CONFIG." : _
  4516.          RESUME 60340
  4517.       IF ERL = 15780 AND ERR = 5 AND _                               ' CPC15-1B
  4518.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _                  ' CPC15-1B
  4519.          RESUME 16073                                                ' CPC15-1B
  4520.       IF ERL = 31000 AND ERR = 58 THEN _
  4521.          KILL A$ : _
  4522.          RESUME 31000
  4523.       IF ERL = 31030 AND ERR = 58 THEN _
  4524.          KILL A$ : _
  4525.          RESUME 31030
  4526.       IF ERL = 22120 AND ERR = 6 THEN _
  4527.          RESUME 22100
  4528.       IF ERL = 24750 AND ERR = 58 THEN _
  4529.          KILL A$ : _
  4530.          RESUME 24750
  4531.       IF ERL = 31020 THEN _
  4532.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4533.          RESUME 31035
  4534.       IF (ERL = 50490 OR ERL = 50540) AND ERR = 58 THEN  _
  4535.          RESUME 50500
  4536.       IF ERL = 50490 OR ERL = 50540 THEN _
  4537.          RESUME 15230
  4538.       IF ERR = 61 THEN _
  4539.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4540.          RESUME 60340
  4541.       IF ERR = 67 THEN _
  4542.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4543.          RESUME 60340
  4544.       IF ERR = 70 THEN _
  4545.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4546.          RESUME 60340
  4547.       IF ERR = 71 THEN _
  4548.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4549.          RESUME 60340
  4550.       IF ERR = 72 THEN _
  4551.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4552.          RESUME 60340
  4553.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4554. 60340 IF F = 1 THEN _
  4555.          DELAY! = FNTI! + 5
  4556.       GOSUB 60440
  4557. 60360 SYSTEM
  4558. '
  4559. ' *****************************************************************************
  4560. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP                                    *
  4561. ' *****************************************************************************
  4562. '
  4563. 60380 FOR I = 1 TO 3
  4564.         SOUND 1000*I,1
  4565.       NEXT
  4566.       RETURN
  4567. '
  4568. ' *****************************************************************************
  4569. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS                      *
  4570. ' *****************************************************************************
  4571. '
  4572. 60440 ' wait routine
  4573. 60450 IF FNTI! < DELAY! THEN _
  4574.          GOTO 60450 ELSE _
  4575.       RETURN
  4576.